setting business unit, brands and keywords

This commit is contained in:
gexce
2017-10-19 18:35:11 +02:00
parent f9cb742495
commit 885b38bb6c
4 changed files with 120 additions and 43 deletions
@@ -39,6 +39,35 @@ public class Definitions {
classifications.put("Status.Released", new Classification("279fce5751584837bd3aa68a00d4f204", 1)); classifications.put("Status.Released", new Classification("279fce5751584837bd3aa68a00d4f204", 1));
classifications.put("Status.Archived", new Classification("4306204af75442fda297a7b4006b4a87", 1)); classifications.put("Status.Archived", new Classification("4306204af75442fda297a7b4006b4a87", 1));
// /Bayer/Animal Health/Brands
classifications.put("Brand.Advantage", new Classification("b3f04996de1644df9d08a6dd00cff70e", 1));
classifications.put("Brand.Advantix", new Classification("dc758de7d91e44d6a768a6dd00cff7ad", 1));
classifications.put("Brand.Advocate", new Classification("c7979fc30bb843e486bba6dd00cff835", 1));
classifications.put("Brand.Baytril", new Classification("9c8a43adf3324ca6adb0a7d000f427f5", 1));
classifications.put("Brand.Bolfo/Bay-o-Pet", new Classification("922a46fc3f6a44bfb025a7d000f428ac", 1));
classifications.put("Brand.CVBD", new Classification("fc84b38665a44291a24ba70f00f7aa1f", 1));
classifications.put("Brand.Drontal", new Classification("ca18ffb9735e4f1691cfa6dd00cffb07", 1));
classifications.put("Brand.Procox", new Classification("a64abb14f3fc461ab973a6dd00cffb8f", 1));
classifications.put("Brand.Profender", new Classification("6be697c82ec34354b0c3a6dd00cffc04", 1));
classifications.put("Brand.Seresto", new Classification("2aea5f8d28294cde8346a6dd00cffc75", 1));
classifications.put("Brand.Veraflox", new Classification("c2bd6003fa6b4093a50fa6dd00cffd3e", 1));
classifications.put("Brand.miscellaneous", new Classification("bc9d93616c0548f99f7fa6dd00cff69d", 1));
classifications.put("Brand.Miscellaneous", new Classification("bc9d93616c0548f99f7fa6dd00cff69d", 1));
classifications.put("Brand.Baycox", new Classification("ef3028f6ba8744508035a6dd00cffe45", 1));
classifications.put("Brand.Bayticol", new Classification("bd1819c976e643bf916ba6dd00cffec4", 1));
classifications.put("Brand.Baytril", new Classification("1053978a142742ad8033a6dd00cfff42", 1));
classifications.put("Brand.Bayvarol", new Classification("4f4816c552e04630b575a6dd00cfffcf", 1));
classifications.put("Brand.Biosecurity", new Classification("ea123567d7174daf8a7ca6dd00d0008a", 1));
classifications.put("Brand.Catosal", new Classification("55fba5b1c9084c74905ba6dd00d0011c", 1));
classifications.put("Brand.Ceffect", new Classification("ac7c47b7959b46948697a6dd00d001bb", 1));
classifications.put("Brand.Dairy Products", new Classification("a54fcbb0dd4741059f95a6dd00d00289", 1));
classifications.put("Brand.Honey bee care", new Classification("996f2d1656f44368a87ba6dd00d00353", 1));
classifications.put("Brand.Victrio", new Classification("9d260d0e9e864ab3b3a4a6dd00d005f1", 1));
classifications.put("Brand.Zelnate", new Classification("b3887552c9554d6991e4a6dd00d006ee", 1));
classifications.put("Brand.Droncit", new Classification("86251780660d4faf95cda7cb010c40fe", 1));
classifications.put("MediaType.Other", new Classification("7c13e620-7eb0-4c12-9dfb-a7b4008f19b1", 1)); classifications.put("MediaType.Other", new Classification("7c13e620-7eb0-4c12-9dfb-a7b4008f19b1", 1));
classifications.put("MediaType.Banner", new Classification("eb786339a5de44679ff6a7b4008f1ee0", 1)); classifications.put("MediaType.Banner", new Classification("eb786339a5de44679ff6a7b4008f1ee0", 1));
classifications.put("MediaType.Book", new Classification("25a59832a6f84cb0a477a73100a2a091", 1)); classifications.put("MediaType.Book", new Classification("25a59832a6f84cb0a477a73100a2a091", 1));
@@ -8,6 +8,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -31,7 +32,10 @@ import org.springframework.web.client.RestTemplate;
import com.bayer.edam.migration.adam.Token; import com.bayer.edam.migration.adam.Token;
import com.bayer.edam.migration.adam.WriteRecord; import com.bayer.edam.migration.adam.WriteRecord;
import com.bayer.edam.migration.adam.WriteRecord.Classification;
import com.bayer.edam.migration.mam.Entry; import com.bayer.edam.migration.mam.Entry;
import com.bayer.edam.migration.mam.categories.CategoryTree;
import com.bayer.edam.migration.mam.categories.CategoryTree.Node;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
@SpringBootApplication @SpringBootApplication
@@ -65,6 +69,7 @@ public class MamMigrationSelective implements CommandLineRunner {
private ObjectMapper jsonMapper = new ObjectMapper(); private ObjectMapper jsonMapper = new ObjectMapper();
private List<String> locations = new ArrayList<String>(); private List<String> locations = new ArrayList<String>();
private CategoryTree mamCategoryTree;
@Override @Override
public void run(String... strings) throws Exception { public void run(String... strings) throws Exception {
@@ -73,6 +78,9 @@ public class MamMigrationSelective implements CommandLineRunner {
FileUtils.writeStringToFile(entryLog, "Location" + fieldSeparator + "Entry" + lineSeparator, Charset.forName("utf-8")); FileUtils.writeStringToFile(entryLog, "Location" + fieldSeparator + "Entry" + lineSeparator, Charset.forName("utf-8"));
FileUtils.writeStringToFile(problemLog, "entryId" + fieldSeparator + "Entry" + lineSeparator, Charset.forName("utf-8")); FileUtils.writeStringToFile(problemLog, "entryId" + fieldSeparator + "Entry" + lineSeparator, Charset.forName("utf-8"));
log.info("Read categories");
mamCategoryTree = new CategoryTree("C:\\Temp\\Migration AH\\2017-10-19_categories.json", "C:\\Temp\\Migration AH\\Media_Assistant_Categories_131017_EDITED.csv");
restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()));
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>(); List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
interceptors.add(new LoggingRequestInterceptor()); interceptors.add(new LoggingRequestInterceptor());
@@ -128,27 +136,47 @@ public class MamMigrationSelective implements CommandLineRunner {
// media type // media type
record.addClassification(Definitions.mediaTypes.get(entry.mediaType.id)); record.addClassification(Definitions.mediaTypes.get(entry.mediaType.id));
// process categories
// TODO HIER GEHT'S WEITER
// process table
Set<String> keywords = new HashSet<String>(); Set<String> keywords = new HashSet<String>();
String status = "Status.Released";
String businessUnit = "BusinessUnit.General";
for (int category : entry.categories) { if (entry.categories.size() > 1)
log.warn("Entry " + entry.id + " has " + entry.categories.size() + " categories assigned");
// TODO
for (int categoryId : entry.categories) {
log.debug("Category: " + categoryId);
Node node = mamCategoryTree.getNode(categoryId);
List<Node> path = new LinkedList<Node>();
Node tmpNode = node;
while (tmpNode.id != CategoryTree.ROOT_NODE_ID) {
path.add(0, tmpNode);
tmpNode = tmpNode.parent;
} }
record.addClassification(status); for (Node n : path) {
record.addClassification(businessUnit); if (n.action.equals("not migrated")) {
log.warn("Skipping entry " + entry.id + " because of tag on (parent) category " + n.name + " (" + n.id + ")");
return;
}
if (n.action.equals("classify")) {
record.addClassification(n.parameter);
}
else if (n.action.equals("brand")) {
String brandClassificationId = "Brand." + n.name.trim();
record.addClassification(brandClassificationId);
}
else if (n.action.equals("campaign")) {
}
else if (n.action.equals("keyword")) {
log.debug("Adding keyword " + n.name.trim());
keywords.add(n.name.trim());
}
}
}
// Fields // Fields
record.addField("byr_Title", entry.name.get("en")); record.addField("byr_Title", entry.name.get("en"));
@@ -200,23 +228,22 @@ public class MamMigrationSelective implements CommandLineRunner {
// record.addField("byr_ah_approvalNumber",entry.gpc.gpcNumber); // record.addField("byr_ah_approvalNumber",entry.gpc.gpcNumber);
// Create record // Create record
HttpEntity<WriteRecord> httpEntity = new HttpEntity<WriteRecord>(record, adamHeaders); // HttpEntity<WriteRecord> httpEntity = new HttpEntity<WriteRecord>(record, adamHeaders);
try { // try {
URI location = restTemplate.postForLocation(adamHost + "/records", httpEntity, WriteRecord.class); // URI location = restTemplate.postForLocation(adamHost + "/records", httpEntity, WriteRecord.class);
log.info("Created " + location); // log.info("Created " + location);
//
FileUtils.writeStringToFile(entryLog, location.toString() + fieldSeparator + entryJson + lineSeparator, // FileUtils.writeStringToFile(entryLog, location.toString() + fieldSeparator + entryJson + lineSeparator,
Charset.forName("utf-8"), true); // Charset.forName("utf-8"), true);
//
locations.add(location.toString()); // locations.add(location.toString());
//
} catch (HttpStatusCodeException hsce) { // } catch (HttpStatusCodeException hsce) {
log.error("Skipping entry " + entry.id + ": Error while creating record " + hsce.getStatusCode().toString()); // log.error("Skipping entry " + entry.id + ": Error while creating record " + hsce.getStatusCode().toString());
log.error(hsce.getResponseBodyAsString()); // log.error(hsce.getResponseBodyAsString());
FileUtils.writeStringToFile(problemLog, entry.id + fieldSeparator + entryJson + lineSeparator, Charset.forName("utf-8"), true); // FileUtils.writeStringToFile(problemLog, entry.id + fieldSeparator + entryJson + lineSeparator, Charset.forName("utf-8"), true);
} // }
} }
private HttpHeaders createMamHeaders() { private HttpHeaders createMamHeaders() {
@@ -3,10 +3,15 @@ package com.bayer.edam.migration.adam;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.bayer.edam.migration.Definitions; import com.bayer.edam.migration.Definitions;
public class WriteRecord { public class WriteRecord {
private static final Logger log = LoggerFactory.getLogger(WriteRecord.class);
public static class Classification { public static class Classification {
public String id; public String id;
public Integer sortIndex; public Integer sortIndex;
@@ -64,7 +69,15 @@ public class WriteRecord {
} }
public void addClassification(String name) { public void addClassification(String name) {
add(Definitions.classifications.get(name)); Classification classification = Definitions.classifications.get(name);
if (classification == null) {
log.error("Could not find classification for '" + name + "'");
}
else {
log.debug("Adding classification " + name);
add(classification);
}
} }
public void addField(String name, String value) { public void addField(String name, String value) {
@@ -24,20 +24,21 @@ public class CategoryTree {
private static final Logger log = LoggerFactory.getLogger(CategoryTree.class); private static final Logger log = LoggerFactory.getLogger(CategoryTree.class);
static class Node implements Comparable<Node> { public static class Node implements Comparable<Node> {
int id; public int id;
String name; public String name;
Node parent; public Node parent;
int parentId; public int parentId;
List<Node> children = new ArrayList<Node>(); public List<Node> children = new ArrayList<Node>();
String action; public String action;
String parameter; public String parameter;
@Override @Override
public int compareTo(Node o) { public int compareTo(Node o) {
return this.name.compareTo(o.name); return this.name.compareTo(o.name);
} }
} }
static class JsonCategory { static class JsonCategory {
@@ -60,10 +61,17 @@ public class CategoryTree {
public static int ROOT_NODE_ID = 1; // ID of logical root "Intern" public static int ROOT_NODE_ID = 1; // ID of logical root "Intern"
public CategoryTree(String jsonFile, String mappingsFile) throws IOException { public CategoryTree(String jsonFile, String mappingsFile) throws IOException {
log.info("Reading categories from file " + jsonFile);
readTree(jsonFile); readTree(jsonFile);
log.info("Reading category mappings from file " + mappingsFile);
readMappings(mappingsFile); readMappings(mappingsFile);
printTree(); // printTree();
}
public Node getNode(int id) {
return nodeMap.get(id);
} }
private void readMappings(String mappingsFile) { private void readMappings(String mappingsFile) {
@@ -77,7 +85,7 @@ public class CategoryTree {
List<String[]> inputRows = parser.parseAll(new File(mappingsFile)); List<String[]> inputRows = parser.parseAll(new File(mappingsFile));
int rowNum = 0; int rowNum = 0;
String[] currentPath = new String[6]; String[] currentPath = new String[7];
for (String[] row : inputRows) { for (String[] row : inputRows) {
rowNum++; rowNum++;
@@ -206,7 +214,7 @@ public class CategoryTree {
public static void main(String[] args) { public static void main(String[] args) {
try { try {
new CategoryTree("C:\\Temp\\Migration AH\\2017-10-17_categories.json", "C:\\Temp\\Migration AH\\Media_Assistant_Categories_131017_EDITED.csv"); new CategoryTree("C:\\Temp\\Migration AH\\2017-10-19_categories.json", "C:\\Temp\\Migration AH\\Media_Assistant_Categories_131017_EDITED.csv");
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }