/** allow for filtering the schemas, only do that for non super users */ public void findSchemas() { List<XmlSchema> allSchemas = DB.getXmlSchemaDAO().findAll(); Set<String> visibleSchemas = null; if (!getUser().hasRight(User.ALL_RIGHTS)) { String schemaFilter = Config.getWithDefault("schema.filter", ""); if (!StringUtils.empty(schemaFilter)) { visibleSchemas = TextParseUtil.commaDelimitedStringToSet(schemaFilter); } } for (XmlSchema schema : allSchemas) { if (schema.getJsonTemplate() != null) { if ((visibleSchemas != null) && (!visibleSchemas.contains(schema.getName()))) continue; schemas.add(schema); } } }
@Action(value = "NewMapping") public String execute() throws Exception { if (selaction == null) { selaction = ""; } Organization o; if (user.organization == null) { o = DB.getDatasetDAO().findById(uploadId, false).getOrganization(); this.orgId = o.getDbID(); } else { o = user.organization; this.orgId = user.getOrganization().getDbID(); } findSchemas(); if ("createschemanew".equals(selaction)) { if (mapName == null || mapName.length() == 0) { addActionError("Specify a mapping name!"); return ERROR; } if (getSchemaSel() <= 0) { addActionError("No schema specified!"); return ERROR; } Mapping mp = new Mapping(); mp.setCreationDate(new java.util.Date()); if (checkName(mapName) == true) { addActionError("Mapping name already exists!"); return ERROR; } mp.setName(mapName); mp.setOrganization(o); // mp.setOrganization(user.getOrganization()); if (getSchemaSel() > 0) { long schemaId = getSchemaSel(); XmlSchema schema = DB.getXmlSchemaDAO().getById(schemaId, false); mp.setTargetSchema(schema); mp.setJsonString(schema.getJsonTemplate()); } Dataset ds = DB.getDatasetDAO().findById(uploadId, false); // apply automatic mappings from schema configuration try { mp.applyConfigurationAutomaticMappings(ds); } catch (Exception e) { e.printStackTrace(); } // if automatic mappings are enabled, try to apply them if (this.getAutomatic()) { try { mp.applyAutomaticMappings(ds); } catch (Exception e) { e.printStackTrace(); } } // if id mappings are required check if schema supports and map them if (this.getIdMappings()) { try { log.debug("Apply id mappings"); mp.applyConfigurationAutomaticMappings(ds); } catch (Exception e) { e.printStackTrace(); } } // save mapping name to db and commit DB.getMappingDAO().makePersistent(mp); DB.commit(); this.setSelectedMapping(mp.getDbID()); this.url += "?selectedMapping=" + this.selectedMapping + "&uploadId=" + this.uploadId + "&orgId=" + this.orgId + "&userId=" + this.user.getDbID() + "&selaction=" + this.getSelaction(); return "success"; } else if ("uploadmapping".equals(selaction)) { if (this.upfile == null || upfile.length() == 0) { addActionError("Please upload a file first!"); return ERROR; } if (mapName == null || mapName.length() == 0) { addActionError("Specify a mapping name!"); return ERROR; } if (getSchemaSel() <= 0) { addActionError("No schema specified!"); return ERROR; } Mapping mp = new Mapping(); mp.setCreationDate(new java.util.Date()); if (checkName(mapName) == true) { addActionError("Mapping name already exists!"); return ERROR; } mp.setName(mapName); mp.setOrganization(o); String convertedMapping = null; if (upfile != null) { try { String dir = System.getProperty("java.io.tmpdir") + File.separator; File newmapping = new File(dir + upfile); StringBuffer contents = StringUtils.fileContents(newmapping); Mappings mappings = new Mappings(contents.toString()); MappingConverter.upgradeToLatest(mappings); } catch (Exception e) { // Catch exception if any e.printStackTrace(); System.err.println("Error importing file: " + e.getMessage()); addActionError("Mappings import failed: " + e.getMessage()); return ERROR; } } if (getSchemaSel() > 0) { long schemaId = getSchemaSel(); XmlSchema schema = DB.getXmlSchemaDAO().getById(schemaId, false); mp.setTargetSchema(schema); if (convertedMapping != null) { mp.setJsonString(convertedMapping); } else { mp.setJsonString(schema.getJsonTemplate()); } } // save mapping name to db and commit? DB.getMappingDAO().makePersistent(mp); DB.commit(); this.setSelectedMapping(mp.getDbID()); this.url += "?selectedMapping=" + this.selectedMapping + "&uploadId=" + this.uploadId + "&orgId=" + this.orgId + "&userId=" + this.user.getDbID() + "&selaction=" + this.getSelaction(); return "success"; } else if ("uploadxsl".equals(selaction)) { if (this.upfile == null || upfile.length() == 0) { addActionError("Please upload a file first!"); return ERROR; } if (mapName == null || mapName.length() == 0) { addActionError("Specify a mapping name!"); return ERROR; } Mapping mp = new Mapping(); mp.setCreationDate(new java.util.Date()); if (checkName(mapName) == true) { addActionError("Mapping name already exists!"); return ERROR; } mp.setName(mapName); mp.setOrganization(o); String xsl = null; if (upfile != null) { try { String dir = System.getProperty("java.io.tmpdir") + File.separator; File newmapping = new File(dir + upfile); StringBuffer contents = StringUtils.fileContents(newmapping, true); xsl = contents.toString(); } catch (Exception e) { // Catch exception if any e.printStackTrace(); System.err.println("Error importing file: " + e.getMessage()); addActionError("Mappings import failed: " + e.getMessage()); return ERROR; } } if (getSchemaSel() > 0) { long schemaId = getSchemaSel(); XmlSchema schema = DB.getXmlSchemaDAO().getById(schemaId, false); mp.setTargetSchema(schema); } if (xsl != null) { mp.setXsl(xsl); } else { System.err.println("Error importing xsl: xsl is null"); addActionError("Mappings import failed: xsl is null"); return ERROR; } // save mapping name to db and commit? DB.getMappingDAO().makePersistent(mp); DB.commit(); this.setSelectedMapping(mp.getDbID()); this.url = "successxsl?selectedMapping=" + this.selectedMapping + "&uploadId=" + this.uploadId + "&orgId=" + this.orgId + "&userId=" + this.user.getDbID() + "&selaction=" + this.getSelaction(); return "successxsl"; } else { log.error("Unknown action"); addActionError("Specify a mapping action!"); return ERROR; } }