package org.gcube.dataanalysis.geo.meta; import it.geosolutions.geonetwork.GNClient; import it.geosolutions.geonetwork.util.GNInsertConfiguration; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map.Entry; import java.util.UUID; import javax.xml.bind.JAXBException; import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; import org.gcube.spatial.data.geonetwork.GeoNetwork; import org.gcube.spatial.data.geonetwork.GeoNetworkAdministration; import org.gcube.spatial.data.geonetwork.LoginLevel; import org.geotoolkit.metadata.iso.DefaultIdentifier; import org.geotoolkit.metadata.iso.DefaultMetadata; import org.geotoolkit.metadata.iso.citation.DefaultCitation; import org.geotoolkit.metadata.iso.citation.DefaultCitationDate; import org.geotoolkit.metadata.iso.citation.DefaultContact; import org.geotoolkit.metadata.iso.citation.DefaultOnlineResource; import org.geotoolkit.metadata.iso.citation.DefaultResponsibleParty; import org.geotoolkit.metadata.iso.constraint.DefaultLegalConstraints; import org.geotoolkit.metadata.iso.distribution.DefaultDigitalTransferOptions; import org.geotoolkit.metadata.iso.distribution.DefaultDistribution; import org.geotoolkit.metadata.iso.distribution.DefaultFormat; import org.geotoolkit.metadata.iso.extent.DefaultExtent; import org.geotoolkit.metadata.iso.extent.DefaultGeographicBoundingBox; import org.geotoolkit.metadata.iso.identification.DefaultDataIdentification; import org.geotoolkit.metadata.iso.identification.DefaultKeywords; import org.geotoolkit.metadata.iso.identification.DefaultResolution; import org.geotoolkit.metadata.iso.identification.DefaultUsage; import org.geotoolkit.metadata.iso.lineage.DefaultLineage; import org.geotoolkit.metadata.iso.lineage.DefaultNominalResolution; import org.geotoolkit.metadata.iso.lineage.DefaultProcessStep; import org.geotoolkit.metadata.iso.lineage.DefaultProcessing; import org.geotoolkit.metadata.iso.lineage.DefaultSource; import org.geotoolkit.metadata.iso.maintenance.DefaultMaintenanceInformation; import org.geotoolkit.metadata.iso.quality.DefaultDataQuality; import org.geotoolkit.metadata.iso.quality.DefaultScope; import org.geotoolkit.metadata.iso.spatial.DefaultGeometricObjects; import org.geotoolkit.metadata.iso.spatial.DefaultVectorSpatialRepresentation; import org.geotoolkit.util.DefaultInternationalString; import org.geotoolkit.xml.XML; import org.opengis.metadata.Metadata; import org.opengis.metadata.citation.DateType; import org.opengis.metadata.citation.PresentationForm; import org.opengis.metadata.citation.ResponsibleParty; import org.opengis.metadata.citation.Role; import org.opengis.metadata.constraint.Restriction; import org.opengis.metadata.identification.KeywordType; import org.opengis.metadata.identification.TopicCategory; import org.opengis.metadata.lineage.ProcessStep; import org.opengis.metadata.maintenance.MaintenanceFrequency; import org.opengis.metadata.maintenance.ScopeCode; import org.opengis.metadata.spatial.GeometricObjectType; import org.opengis.metadata.spatial.SpatialRepresentationType; import org.opengis.metadata.spatial.TopologyLevel; import org.opengis.util.InternationalString; public class GenericLayerMetadata { private String geonetworkUrl = "http://geoserver-dev2.d4science-ii.research-infrastructures.eu/geonetwork/"; private String geoserverUrl = "http://geoserver-dev.d4science-ii.research-infrastructures.eu/geonetwork/"; private String geonetworkUser = "admin"; private String geonetworkPwd = "admin"; private String geonetworkGroup = "3"; private String title = "temperature 04091217ruc.nc"; private String layerName = "T"; private String usageField = "Environmental enrichment"; private String processdescription = "Maps publication"; private String usageLimitations = "Not for commercial scopes"; private Date sourceGenerationDate = new Date(System.currentTimeMillis()); private String categoryTypes = "_BIOTA_"; private String contactInfo = "support@d4science.org"; private String abstractField = ""; private String purpose = "Maps publication"; private String author = "D4Science"; private double res = 0.5d; private double xLL = -180; private double xRU = 180; private double yLL = -85.5; private double yRU = 85.5; private HashSet customTopics; private Date startDate; private Date endDate; public void setCustomTopics(String... topics){ customTopics = new HashSet(); for (String topic:topics) customTopics.add(topic); } public HashSet getCustomTopics(){ return customTopics; } public void setStartDate(Date date){ startDate=date; } public void setEndDate(Date date){ endDate=date; } public Date getStartDate(){ return startDate; } public Date getEndDate(){ return endDate; } public String getGeonetworkUrl() { return geonetworkUrl; } public void setGeonetworkUrl(String geonetworkUrl) { this.geonetworkUrl = geonetworkUrl; } public String getGeonetworkUser() { return geonetworkUser; } public void setGeonetworkUser(String geonetworkUser) { this.geonetworkUser = geonetworkUser; } public String getGeonetworkPwd() { return geonetworkPwd; } public void setGeonetworkPwd(String geonetworkPwd) { this.geonetworkPwd = geonetworkPwd; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getLayerName() { return layerName; } public void setLayerName(String layerName) { this.layerName = layerName; } public String getUsageField() { return usageField; } public void setUsageField(String usageField) { this.usageField = usageField; } public String getProcessdescription() { return processdescription; } public void setProcessdescription(String processdescription) { this.processdescription = processdescription; } public String getUsageLimitations() { return usageLimitations; } public void setUsageLimitations(String usageLimitations) { this.usageLimitations = usageLimitations; } public Date getSourceGenerationDate() { return sourceGenerationDate; } public void setSourceGenerationDate(Date sourceGenerationDate) { this.sourceGenerationDate = sourceGenerationDate; } public String getCategoryTypes() { return categoryTypes; } public void setCategoryTypes(String categoryTypes) { this.categoryTypes = categoryTypes; } public String getContactInfo() { return contactInfo; } public void setContactInfo(String contactInfo) { this.contactInfo = contactInfo; } public String getAbstractField() { return abstractField; } public void setAbstractField(String abstractField) { this.abstractField = abstractField; } public String getPurpose() { return purpose; } public void setPurpose(String purpose) { this.purpose = purpose; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public double getResolution() { return res; } public void setResolution(double res) { this.res = res; } public double getXLeftLow() { return xLL; } public void setXLeftLow(double xLL) { this.xLL = xLL; } public double getXRightUpper() { return xRU; } public void setXRightUpper(double xRU) { this.xRU = xRU; } public double getYLeftLow() { return yLL; } public void setYLeftLow(double yLL) { this.yLL = yLL; } public double getYRightUpper() { return yRU; } public void setYRightUpper(double yRU) { this.yRU = yRU; } public String getGeoserverUrl() { return geoserverUrl; } public void setGeoserverUrl(String geoserverUrl) { this.geoserverUrl = geoserverUrl; } public String getGeonetworkGroup() { return geonetworkGroup; } public void setGeonetworkGroup(String geonetworkGroup) { this.geonetworkGroup = geonetworkGroup; } public static File meta2File(Metadata meta) throws IOException, JAXBException { File temp = File.createTempFile("meta", ".xml"); FileWriter writer = new FileWriter(temp); writer.write(XML.marshal(meta)); writer.close(); return temp; } public void insertMetaData() throws Exception { // layer uri: wms, wfs wcs List layerUris = new ArrayList(); layerUris.add(OGCFormatter.getWmsUrl(geoserverUrl, layerName, null, OGCFormatter.buildBoundingBox(xLL, yLL, xRU, yRU))); layerUris.add(OGCFormatter.getWfsUrl(geoserverUrl, layerName, OGCFormatter.buildBoundingBox(xLL, yLL, xRU, yRU), 0, "json")); layerUris.add(OGCFormatter.getWcsUrl(geoserverUrl, layerName, OGCFormatter.buildBoundingBox(xLL, yLL, xRU, yRU))); // layer keywords HashMap> descriptiveKeyWords = new HashMap>(); HashSet keySet = new HashSet(); keySet.add("D4Science"); if (customTopics!=null) keySet.addAll(customTopics); descriptiveKeyWords.put(KeywordType.THEME, keySet); if (startDate!=null){ HashSet temporalkeySet = new HashSet(); temporalkeySet.add(startDate.toString()); if (!endDate.equals(startDate)) temporalkeySet.add(endDate.toString()); descriptiveKeyWords.put(KeywordType.TEMPORAL, temporalkeySet); } // author: DefaultResponsibleParty party = new DefaultResponsibleParty(); party.setIndividualName(author); DefaultContact contact = new DefaultContact(); contact.setContactInstructions(new DefaultInternationalString(contactInfo)); party.setContactInfo(contact); party.setRole(Role.ORIGINATOR); // citation: DefaultCitation citation = new DefaultCitation(); citation.setTitle(new DefaultInternationalString(title)); ArrayList citDates = new ArrayList(); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.CREATION)); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.PUBLICATION)); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.REVISION)); citation.setDates(citDates); ArrayList citAltTitle = new ArrayList(); citAltTitle.add(new DefaultInternationalString(title)); citation.setAlternateTitles(citAltTitle); citation.setEditionDate(sourceGenerationDate); citation.getPresentationForms().add(PresentationForm.MAP_DIGITAL); ArrayList keywordslist = new ArrayList(); for (Entry> entry : descriptiveKeyWords.entrySet()) { DefaultKeywords keywords = new DefaultKeywords(); for (String key : entry.getValue()) keywords.getKeywords().add(new DefaultInternationalString(key)); keywords.setType(entry.getKey()); DefaultCitation thesaurus = new DefaultCitation(); thesaurus.setTitle(new DefaultInternationalString("General")); thesaurus.setDates(citDates); keywords.setThesaurusName(thesaurus); keywordslist.add(keywords); } // usage: DefaultUsage usage = new DefaultUsage(); usage.setSpecificUsage(new DefaultInternationalString(usageField)); usage.setUsageDate(sourceGenerationDate); usage.setUserDeterminedLimitations(new DefaultInternationalString(usageLimitations)); usage.setUserContactInfo(new ArrayList(Arrays.asList(party))); ArrayList usages = new ArrayList(Arrays.asList(usage)); //build categories by guessing on the filename List categories = guessTopicCategory(categoryTypes); AnalysisLogger.getLogger().debug("Guessed Topics: "+categories); // Spatial Rapresentation Info DefaultGeometricObjects geoObjs = new DefaultGeometricObjects(); geoObjs.setGeometricObjectType(GeometricObjectType.COMPLEX); DefaultVectorSpatialRepresentation spatial = new DefaultVectorSpatialRepresentation(); spatial.setTopologyLevel(TopologyLevel.GEOMETRY_ONLY); spatial.getGeometricObjects().add(geoObjs); // Extent: DefaultExtent extent = new DefaultExtent(); extent.setGeographicElements(Collections.singleton(new DefaultGeographicBoundingBox(xLL, xRU, yLL, yRU))); extent.setDescription(new DefaultInternationalString("Bounding box")); /*Only with Geotoolkit 4.x DefaultTemporalExtent stext = new DefaultTemporalExtent(startDate,endDate); stext.setStartTime(startDate); stext.setEndTime(endDate); extent.setTemporalElements(Arrays.asList(stext)); */ extent.freeze(); //resolution DefaultNominalResolution resolution = new DefaultNominalResolution(); resolution.setGroundResolution(res); resolution.setScanningResolution(res); DefaultResolution dres = new DefaultResolution(); dres.setDistance(res); // layers access: DefaultDistribution distribution = new DefaultDistribution(); DefaultDigitalTransferOptions transferOptions = new DefaultDigitalTransferOptions(); for (String uri : layerUris){ DefaultOnlineResource onlineresource = new DefaultOnlineResource(new URI(uri)); /* onlineresource.setName(arg0); onlineresource.setLinkage(arg0); onlineresource.setProtocol(arg0); onlineresource.setDescription(arg0); */ transferOptions.getOnLines().add(onlineresource); } distribution.getTransferOptions().add(transferOptions); DefaultFormat format1 = new DefaultFormat(); format1.setName(new DefaultInternationalString("WMS")); format1.setVersion(new DefaultInternationalString("1.1.0")); DefaultFormat format2 = new DefaultFormat(); format2.setName(new DefaultInternationalString("WFS")); format2.setVersion(new DefaultInternationalString("1.1.0")); DefaultFormat format3 = new DefaultFormat(); format3.setName(new DefaultInternationalString("WCS")); format3.setVersion(new DefaultInternationalString("1.0.0")); distribution.setDistributionFormats(new ArrayList(Arrays.asList(format1, format2, format3))); // legal constraints DefaultLegalConstraints constraints = new DefaultLegalConstraints(); constraints.getUseLimitations().add(new DefaultInternationalString("Licensed")); constraints.getAccessConstraints().add(Restriction.LICENSE); constraints.getUseConstraints().add(Restriction.LICENSE); // quality declaration: DefaultDataQuality processQuality = new DefaultDataQuality(); //citation DefaultCitation sourceCitation = new DefaultCitation(); sourceCitation.setTitle(new DefaultInternationalString(title)); sourceCitation.getDates().add(new DefaultCitationDate(sourceGenerationDate, DateType.CREATION)); sourceCitation.getIdentifiers().add(new DefaultIdentifier(categoryTypes)); //source DefaultSource source = new DefaultSource(); source.setResolution(resolution); source.setDescription(new DefaultInternationalString(title)); source.setSourceCitation(sourceCitation); // provenance DefaultProcessStep preprocessStep = new DefaultProcessStep(); DefaultProcessStep processStep = new DefaultProcessStep(preprocessStep); DefaultProcessing processing = new DefaultProcessing(); processing.setSoftwareReferences(new ArrayList(Arrays.asList(sourceCitation))); processStep.setDescription(new DefaultInternationalString(processdescription)); DefaultLineage processLineage = new DefaultLineage(); processLineage.setProcessSteps(new ArrayList(Arrays.asList(processStep))); processQuality.setLineage(processLineage); processQuality.setScope(new DefaultScope(ScopeCode.DATASET)); // fulfill identification DefaultDataIdentification ident = new DefaultDataIdentification(); ident.setCitation(citation); ident.setAbstract(new DefaultInternationalString(abstractField)); ident.setPurpose(new DefaultInternationalString(purpose)); ident.getResourceMaintenances().add(new DefaultMaintenanceInformation(MaintenanceFrequency.AS_NEEDED)); ident.setDescriptiveKeywords(keywordslist); ident.setTopicCategories(categories); ident.setResourceSpecificUsages(usages); ident.setExtents(new ArrayList(Arrays.asList(extent))); ident.setSpatialRepresentationTypes(new ArrayList(Arrays.asList(SpatialRepresentationType.GRID))); ident.setSpatialResolutions(new ArrayList(Arrays.asList(dres))); ident.setLanguages(new ArrayList(Arrays.asList(Locale.ENGLISH))); // Metadata Obj: DefaultMetadata meta = new DefaultMetadata(party, sourceGenerationDate, ident); meta.getSpatialRepresentationInfo().add(spatial); meta.setDistributionInfo(distribution); meta.getMetadataConstraints().add(constraints); meta.getDataQualityInfo().add(processQuality); meta.setLanguage(Locale.ENGLISH); // System.out.println(meta); /* GNClient client = new GNClient(geonetworkUrl); client.login(geonetworkUser, geonetworkPwd); File tmetafile = meta2File(meta); client.insertMetadata(new GNInsertConfiguration(geonetworkGroup, "datasets", "_none_", true), tmetafile); tmetafile.delete(); */ GeoNetworkAdministration readerScope = GeoNetwork.get(); readerScope.login(LoginLevel.SCOPE); GNInsertConfiguration configuration = readerScope.getCurrentUserConfiguration("datasets", "_none_"); readerScope.insertAndPromoteMetadata(configuration, meta); } public void customMetaDataInsert(String[] urls, String[] protocols) throws Exception { customMetaDataInsert(urls,protocols,true); } public void customMetaDataInsert(String[] urls, String[] protocols, boolean isprivate) throws Exception { // layer uri: wms, wfs wcs List layerUris = new ArrayList(); for (int i=0;i> descriptiveKeyWords = new HashMap>(); HashSet keySet = new HashSet(); if (customTopics!=null) keySet.addAll(customTopics); descriptiveKeyWords.put(KeywordType.THEME, keySet); if (startDate!=null){ HashSet temporalkeySet = new HashSet(); temporalkeySet.add(startDate.toString()); if (!endDate.equals(startDate)) temporalkeySet.add(endDate.toString()); descriptiveKeyWords.put(KeywordType.TEMPORAL, temporalkeySet); } // author: DefaultResponsibleParty party = new DefaultResponsibleParty(); party.setIndividualName(author); DefaultContact contact = new DefaultContact(); contact.setContactInstructions(new DefaultInternationalString(contactInfo)); party.setContactInfo(contact); party.setRole(Role.ORIGINATOR); // citation: DefaultCitation citation = new DefaultCitation(); citation.setTitle(new DefaultInternationalString(title)); ArrayList citDates = new ArrayList(); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.CREATION)); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.PUBLICATION)); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.REVISION)); citation.setDates(citDates); ArrayList citAltTitle = new ArrayList(); citAltTitle.add(new DefaultInternationalString(title)); citation.setAlternateTitles(citAltTitle); citation.setEditionDate(sourceGenerationDate); citation.getPresentationForms().add(PresentationForm.MAP_DIGITAL); ArrayList keywordslist = new ArrayList(); for (Entry> entry : descriptiveKeyWords.entrySet()) { DefaultKeywords keywords = new DefaultKeywords(); for (String key : entry.getValue()) keywords.getKeywords().add(new DefaultInternationalString(key)); keywords.setType(entry.getKey()); DefaultCitation thesaurus = new DefaultCitation(); thesaurus.setTitle(new DefaultInternationalString("General")); thesaurus.setDates(citDates); keywords.setThesaurusName(thesaurus); keywordslist.add(keywords); } // usage: DefaultUsage usage = new DefaultUsage(); usage.setSpecificUsage(new DefaultInternationalString(usageField)); usage.setUsageDate(sourceGenerationDate); usage.setUserDeterminedLimitations(new DefaultInternationalString(usageLimitations)); usage.setUserContactInfo(new ArrayList(Arrays.asList(party))); ArrayList usages = new ArrayList(Arrays.asList(usage)); //build categories by guessing on the filename List categories = guessTopicCategory(categoryTypes); AnalysisLogger.getLogger().debug("Guessed Topics: "+categories); // Spatial Rapresentation Info DefaultGeometricObjects geoObjs = new DefaultGeometricObjects(); geoObjs.setGeometricObjectType(GeometricObjectType.COMPLEX); DefaultVectorSpatialRepresentation spatial = new DefaultVectorSpatialRepresentation(); spatial.setTopologyLevel(TopologyLevel.GEOMETRY_ONLY); spatial.getGeometricObjects().add(geoObjs); // Extent: DefaultExtent extent = new DefaultExtent(); extent.setGeographicElements(Collections.singleton(new DefaultGeographicBoundingBox(xLL, xRU, yLL, yRU))); extent.setDescription(new DefaultInternationalString("Bounding box")); /*Only with Geotoolkit 4.x DefaultTemporalExtent stext = new DefaultTemporalExtent(startDate,endDate); stext.setStartTime(startDate); stext.setEndTime(endDate); extent.setTemporalElements(Arrays.asList(stext)); */ extent.freeze(); //resolution DefaultNominalResolution resolution = new DefaultNominalResolution(); resolution.setGroundResolution(res); resolution.setScanningResolution(res); DefaultResolution dres = new DefaultResolution(); dres.setDistance(res); // layers access: DefaultDistribution distribution = new DefaultDistribution(); DefaultDigitalTransferOptions transferOptions = new DefaultDigitalTransferOptions(); for (String uri : layerUris){ DefaultOnlineResource onlineres = new DefaultOnlineResource(new URI(uri)); String url = onlineres.getLinkage().toURL().toString(); String estdescription = getDescription(url); String estProtocol = getProtocol(url); String estName = getName(title, abstractField, estProtocol, url); AnalysisLogger.getLogger().debug("URL:" + url + "\nDescription:" + estdescription + "\nName:" + estName + "\nProtocol:" + estProtocol); onlineres.setDescription(new DefaultInternationalString(estdescription)); onlineres.setName(estName); onlineres.setProtocol(estProtocol); transferOptions.getOnLines().add(new DefaultOnlineResource(new URI(uri))); } distribution.getTransferOptions().add(transferOptions); DefaultFormat [] formats = new DefaultFormat[protocols.length]; for (int i=0;i(Arrays.asList(formats))); // legal constraints DefaultLegalConstraints constraints = new DefaultLegalConstraints(); constraints.getUseLimitations().add(new DefaultInternationalString("Licensed")); constraints.getAccessConstraints().add(Restriction.LICENSE); constraints.getUseConstraints().add(Restriction.LICENSE); // quality declaration: DefaultDataQuality processQuality = new DefaultDataQuality(); //citation DefaultCitation sourceCitation = new DefaultCitation(); sourceCitation.setTitle(new DefaultInternationalString(title)); sourceCitation.getDates().add(new DefaultCitationDate(sourceGenerationDate, DateType.CREATION)); sourceCitation.getIdentifiers().add(new DefaultIdentifier(categoryTypes)); //source DefaultSource source = new DefaultSource(); source.setResolution(resolution); source.setDescription(new DefaultInternationalString(title)); source.setSourceCitation(sourceCitation); // provenance DefaultProcessStep preprocessStep = new DefaultProcessStep(); DefaultProcessStep processStep = new DefaultProcessStep(preprocessStep); DefaultProcessing processing = new DefaultProcessing(); processing.setSoftwareReferences(new ArrayList(Arrays.asList(sourceCitation))); processStep.setDescription(new DefaultInternationalString(processdescription)); DefaultLineage processLineage = new DefaultLineage(); processLineage.setProcessSteps(new ArrayList(Arrays.asList(processStep))); processQuality.setLineage(processLineage); processQuality.setScope(new DefaultScope(ScopeCode.DATASET)); // fulfill identification DefaultDataIdentification ident = new DefaultDataIdentification(); ident.setCitation(citation); ident.setAbstract(new DefaultInternationalString(abstractField)); ident.setPurpose(new DefaultInternationalString(purpose)); ident.getResourceMaintenances().add(new DefaultMaintenanceInformation(MaintenanceFrequency.AS_NEEDED)); ident.setDescriptiveKeywords(keywordslist); ident.setTopicCategories(categories); ident.setResourceSpecificUsages(usages); ident.setExtents(new ArrayList(Arrays.asList(extent))); ident.setSpatialRepresentationTypes(new ArrayList(Arrays.asList(SpatialRepresentationType.GRID))); ident.setSpatialResolutions(new ArrayList(Arrays.asList(dres))); ident.setLanguages(new ArrayList(Arrays.asList(Locale.ENGLISH))); // Metadata Obj: DefaultMetadata meta = new DefaultMetadata(party, sourceGenerationDate, ident); meta.setFileIdentifier(UUID.randomUUID().toString()); meta.getSpatialRepresentationInfo().add(spatial); meta.setDistributionInfo(distribution); meta.getMetadataConstraints().add(constraints); meta.getDataQualityInfo().add(processQuality); meta.setLanguage(Locale.ENGLISH); // AnalysisLogger.getLogger().debug(meta); GeoNetworkAdministration readerScope = GeoNetwork.get(); if (isprivate) readerScope.login(LoginLevel.PRIVATE); else readerScope.login(LoginLevel.SCOPE); GNInsertConfiguration configuration = readerScope.getCurrentUserConfiguration("datasets", "_none_"); if (isprivate) readerScope.insertMetadata(configuration, meta); else readerScope.insertAndPromoteMetadata(configuration, meta); //old command /* GNClient client = new GNClient(geonetworkUrl); client.login(geonetworkUser, geonetworkPwd); File tmetafile = meta2File(meta); tmetafile.delete(); client.insertMetadata(new GNInsertConfiguration(geonetworkGroup, "datasets", "_none_", true), tmetafile); */ } public static List guessTopicCategory(String refString){ String searcher = refString.toLowerCase(); List categories = new ArrayList(); for (TopicCategory topic:TopicCategory.values()){ if (searcher.contains("_"+topic.name().toLowerCase()+"_")){ categories.add(topic); } } return categories; } public Metadata createBasicMeta(String[] urls,String[] protocols) throws Exception { // layer uri: wms, wfs wcs List layerUris = new ArrayList(); for (int i=0;i> descriptiveKeyWords = new HashMap>(); HashSet keySet = new HashSet(); if (customTopics!=null) keySet.addAll(customTopics); descriptiveKeyWords.put(KeywordType.THEME, keySet); if (startDate!=null){ HashSet temporalkeySet = new HashSet(); temporalkeySet.add(startDate.toString()); if (!endDate.equals(startDate)) temporalkeySet.add(endDate.toString()); descriptiveKeyWords.put(KeywordType.TEMPORAL, temporalkeySet); } // author: DefaultResponsibleParty party = new DefaultResponsibleParty(); party.setIndividualName(author); DefaultContact contact = new DefaultContact(); contact.setContactInstructions(new DefaultInternationalString(contactInfo)); party.setContactInfo(contact); party.setRole(Role.ORIGINATOR); // citation: DefaultCitation citation = new DefaultCitation(); citation.setTitle(new DefaultInternationalString(title)); ArrayList citDates = new ArrayList(); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.CREATION)); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.PUBLICATION)); citDates.add(new DefaultCitationDate(sourceGenerationDate, DateType.REVISION)); citation.setDates(citDates); ArrayList citAltTitle = new ArrayList(); citAltTitle.add(new DefaultInternationalString(title)); citation.setAlternateTitles(citAltTitle); citation.setEditionDate(sourceGenerationDate); citation.getPresentationForms().add(PresentationForm.MAP_DIGITAL); ArrayList keywordslist = new ArrayList(); for (Entry> entry : descriptiveKeyWords.entrySet()) { DefaultKeywords keywords = new DefaultKeywords(); for (String key : entry.getValue()) keywords.getKeywords().add(new DefaultInternationalString(key)); keywords.setType(entry.getKey()); DefaultCitation thesaurus = new DefaultCitation(); thesaurus.setTitle(new DefaultInternationalString("General")); thesaurus.setDates(citDates); keywords.setThesaurusName(thesaurus); keywordslist.add(keywords); } // usage: DefaultUsage usage = new DefaultUsage(); usage.setSpecificUsage(new DefaultInternationalString(usageField)); usage.setUsageDate(sourceGenerationDate); usage.setUserDeterminedLimitations(new DefaultInternationalString(usageLimitations)); usage.setUserContactInfo(new ArrayList(Arrays.asList(party))); ArrayList usages = new ArrayList(Arrays.asList(usage)); //build categories by guessing on the filename List categories = guessTopicCategory(categoryTypes); AnalysisLogger.getLogger().debug("Guessed Topics: "+categories); // Spatial Rapresentation Info DefaultGeometricObjects geoObjs = new DefaultGeometricObjects(); geoObjs.setGeometricObjectType(GeometricObjectType.COMPLEX); DefaultVectorSpatialRepresentation spatial = new DefaultVectorSpatialRepresentation(); spatial.setTopologyLevel(TopologyLevel.GEOMETRY_ONLY); spatial.getGeometricObjects().add(geoObjs); // Extent: DefaultExtent extent = new DefaultExtent(); extent.setGeographicElements(Collections.singleton(new DefaultGeographicBoundingBox(xLL, xRU, yLL, yRU))); extent.setDescription(new DefaultInternationalString("Bounding box")); /*Only with Geotoolkit 4.x DefaultTemporalExtent stext = new DefaultTemporalExtent(startDate,endDate); stext.setStartTime(startDate); stext.setEndTime(endDate); extent.setTemporalElements(Arrays.asList(stext)); */ extent.freeze(); //resolution DefaultNominalResolution resolution = new DefaultNominalResolution(); resolution.setGroundResolution(res); resolution.setScanningResolution(res); DefaultResolution dres = new DefaultResolution(); dres.setDistance(res); // layers access: DefaultDistribution distribution = new DefaultDistribution(); DefaultDigitalTransferOptions transferOptions = new DefaultDigitalTransferOptions(); for (String uri : layerUris) transferOptions.getOnLines().add(new DefaultOnlineResource(new URI(uri))); distribution.getTransferOptions().add(transferOptions); DefaultFormat [] formats = new DefaultFormat[protocols.length]; for (int i=0;i(Arrays.asList(formats))); // legal constraints DefaultLegalConstraints constraints = new DefaultLegalConstraints(); constraints.getUseLimitations().add(new DefaultInternationalString("Licensed")); constraints.getAccessConstraints().add(Restriction.LICENSE); constraints.getUseConstraints().add(Restriction.LICENSE); // quality declaration: DefaultDataQuality processQuality = new DefaultDataQuality(); //citation DefaultCitation sourceCitation = new DefaultCitation(); sourceCitation.setTitle(new DefaultInternationalString(title)); sourceCitation.getDates().add(new DefaultCitationDate(sourceGenerationDate, DateType.CREATION)); sourceCitation.getIdentifiers().add(new DefaultIdentifier(categoryTypes)); //source DefaultSource source = new DefaultSource(); source.setResolution(resolution); source.setDescription(new DefaultInternationalString(title)); source.setSourceCitation(sourceCitation); // provenance DefaultProcessStep preprocessStep = new DefaultProcessStep(); DefaultProcessStep processStep = new DefaultProcessStep(preprocessStep); DefaultProcessing processing = new DefaultProcessing(); processing.setSoftwareReferences(new ArrayList(Arrays.asList(sourceCitation))); processStep.setDescription(new DefaultInternationalString(processdescription)); DefaultLineage processLineage = new DefaultLineage(); processLineage.setProcessSteps(new ArrayList(Arrays.asList(processStep))); processQuality.setLineage(processLineage); processQuality.setScope(new DefaultScope(ScopeCode.DATASET)); // fulfill identification DefaultDataIdentification ident = new DefaultDataIdentification(); ident.setCitation(citation); ident.setAbstract(new DefaultInternationalString(abstractField)); ident.setPurpose(new DefaultInternationalString(purpose)); ident.getResourceMaintenances().add(new DefaultMaintenanceInformation(MaintenanceFrequency.AS_NEEDED)); ident.setDescriptiveKeywords(keywordslist); ident.setTopicCategories(categories); ident.setResourceSpecificUsages(usages); ident.setExtents(new ArrayList(Arrays.asList(extent))); ident.setSpatialRepresentationTypes(new ArrayList(Arrays.asList(SpatialRepresentationType.GRID))); ident.setSpatialResolutions(new ArrayList(Arrays.asList(dres))); ident.setLanguages(new ArrayList(Arrays.asList(Locale.ENGLISH))); // Metadata Obj: DefaultMetadata meta = new DefaultMetadata(party, sourceGenerationDate, ident); meta.getSpatialRepresentationInfo().add(spatial); meta.setDistributionInfo(distribution); meta.getMetadataConstraints().add(constraints); meta.getDataQualityInfo().add(processQuality); meta.setLanguage(Locale.ENGLISH); return meta; } public static String getProtocol(String url) { if (url.toLowerCase().contains("service=wfs")) return "OGC:WFS-1.1.0-http-get-feature"; else if (url.toLowerCase().contains("service=wms")) return "OGC:WMS-1.3.0-http-get-map"; else if (url.toLowerCase().contains("service=wcs")) return "OGC:WCS-1.0.0-http-get-coverage"; else if (url.toLowerCase().contains("/dodsC")) return "OGC:OPeNDAP-2.0.0"; else return "WWW:LINK-1.0-http--link"; } public static String getDescription(String url) { if (url.toLowerCase().contains("service=wfs")) return "GIS data (WFS - JSON)"; else if (url.toLowerCase().contains("service=wms")) { if (url.toLowerCase().contains("openlayers")) return "GIS data (WMS - OpenLayers)"; else return "GIS data (WMS)"; } else if (url.toLowerCase().contains("service=wcs")) return "GIS data (WCS - Geotiff)"; else if (url.toLowerCase().contains("/dodsc")) return "GIS data (OPenNDAP - NetCDF)"; else return "Direct HTTP link"; } public static String getName(String title, String abstractTitle, String protocol, String url) { try{ if (abstractTitle.matches(".+: ")) { String variablename = title.substring(title.indexOf(":")); AnalysisLogger.getLogger().debug("detected variable " + variablename); return variablename; } else { if (url.contains("catalog.xml")) { return "Catalogue"; } else if (protocol.equals("WWW:LINK-1.0-http--link") || protocol.equals("OGC:OPeNDAP-2.0.0")) { int slash = url.lastIndexOf("/"); if (slash > 0) { String file = url.substring(slash + 1); if (file.trim().length() > 0 && file.contains(".")) return file; else return "Direct link to resource"; } else return "Direct link to resource"; } else { int check = -1; String checker = ""; if (protocol.equals("OGC:WMS-1.3.0-http-get-map")) { checker = "layers="; } else if (protocol.equals("OGC:WFS-1.0.0-http-get-feature")) { checker = "typename="; } else if (protocol.equals("OGC:WCS-1.0.0-http-get-coverage")) { checker = "coverage="; } check = url.toLowerCase().indexOf(checker); if (check > 0) { String cutUrl = url.substring(check + checker.length()); int end = cutUrl.indexOf("&"); String layerName = cutUrl; if (end > -1) layerName = cutUrl.substring(0, end); int column = -1; if ((column = layerName.indexOf(":")) > 0) layerName = layerName.substring(column + 1); AnalysisLogger.getLogger().debug("Layer Name: " + layerName); return layerName; } else return title; } } }catch(Exception e){ e.printStackTrace(); return "LINK"; } } }