Author: luca
Date: Tue Mar 20 22:44:09 2012
New Revision: 1303182
URL: http://svn.apache.org/viewvc?rev=1303182&view=rev
Log:
Implementing expanded syntax for environment variable replacement (OODT-405)
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapConfigMetKeys.java
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapProfileMetKeys.java
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/DasMetadataExtractor.java
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/ThreddsMetadataExtractor.java
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileChecker.java
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileUtils.java
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapConfigMetKeys.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapConfigMetKeys.java?rev=1303182&r1=1303181&r2=1303182&view=diff
==============================================================================
---
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapConfigMetKeys.java
(original)
+++
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapConfigMetKeys.java
Tue Mar 20 22:44:09 2012
@@ -69,5 +69,7 @@ public interface OpendapConfigMetKeys {
public static final String DATASET_MET_NAME_ATTR = "name";
public static final String DATASET_MET_VALUE_ATTR = "value";
+
+ public static final String RES_LOCATION_ATTR = "resLocation";
}
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapProfileMetKeys.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapProfileMetKeys.java?rev=1303182&r1=1303181&r2=1303182&view=diff
==============================================================================
---
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapProfileMetKeys.java
(original)
+++
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/config/OpendapProfileMetKeys.java
Tue Mar 20 22:44:09 2012
@@ -26,6 +26,8 @@ public interface OpendapProfileMetKeys {
public static final String VARIABLES = "Variables";
+ public static final String COORDINATES = "Coordinates";
+
public static final String VARIABLES_LONG_NAMES = "Variable Long
Names";
public static final String CF_STANDARD_NAMES = "CF Standard Names";
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/DasMetadataExtractor.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/DasMetadataExtractor.java?rev=1303182&r1=1303181&r2=1303182&view=diff
==============================================================================
---
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/DasMetadataExtractor.java
(original)
+++
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/DasMetadataExtractor.java
Tue Mar 20 22:44:09 2012
@@ -96,19 +96,39 @@ public class DasMetadataExtractor implem
ProfileUtils.addIfNotExisting(metadata, key,
att.getValues());
}
- // NetCDF variables
+ // NetCDF coordinates
} else {
- // store variable name
- ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.VARIABLES, attName);
- // store "standard_name", "long_name"
- while (e.hasMoreElements()) {
- String key = (String) e.nextElement();
- Attribute att = at.getAttribute(key);
- if (key.equalsIgnoreCase(STANDARD_NAME)) {
- ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.CF_STANDARD_NAMES, att.getValueAt(0));
- } else if (key.equalsIgnoreCase(LONG_NAME)) {
- ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.VARIABLES_LONG_NAMES, att.getValueAt(0));
- }
+
+ if ( attName.equalsIgnoreCase("lat") ||
attName.equalsIgnoreCase("latitude")
+ || attName.equalsIgnoreCase("lon") ||
attName.equalsIgnoreCase("longitude")
+ || attName.equalsIgnoreCase("time")
+ || attName.equalsIgnoreCase("alt") ||
attName.equalsIgnoreCase("altitude")
+ || attName.equalsIgnoreCase("depth")
+ ) {
+
+ // store coordinate name
+ ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.COORDINATES, attName);
+
+ } else if (attName.startsWith("time_")) {
+
+ // ignore for now - it's not a coordinate neither a
variable you would want to search on
+
+ // NetCDF variables
+ } else {
+
+ // store variable name
+ ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.VARIABLES, attName);
+ // store "standard_name", "long_name"
+ while (e.hasMoreElements()) {
+ String key = (String) e.nextElement();
+ Attribute att = at.getAttribute(key);
+ if (key.equalsIgnoreCase(STANDARD_NAME)) {
+ ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.CF_STANDARD_NAMES, att.getValueAt(0));
+ } else if (key.equalsIgnoreCase(LONG_NAME)) {
+ ProfileUtils.addIfNotNull(metadata,
OpendapProfileMetKeys.VARIABLES_LONG_NAMES, att.getValueAt(0));
+ }
+ }
+
}
}
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/ThreddsMetadataExtractor.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/ThreddsMetadataExtractor.java?rev=1303182&r1=1303181&r2=1303182&view=diff
==============================================================================
---
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/ThreddsMetadataExtractor.java
(original)
+++
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/extractors/ThreddsMetadataExtractor.java
Tue Mar 20 22:44:09 2012
@@ -273,6 +273,8 @@ public class ThreddsMetadataExtractor im
// add opendap access URL
if (type.equalsIgnoreCase(ServiceType.OPENDAP.toString())) {
+ // store opendap URL
+ ProfileUtils.addIfNotNull(met,"OpendapUrl",url+".dods");
// note: special processing of opendap endpoints since URL in thredds
catalog is unusable without a suffix
ProfileUtils.addIfNotNull(met,"Access",
this.encodeAccessTuple(url+".html", ProfileUtils.MIME_TYPE_OPENDAP_HTML, type));
}
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileChecker.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileChecker.java?rev=1303182&r1=1303181&r2=1303182&view=diff
==============================================================================
---
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileChecker.java
(original)
+++
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileChecker.java
Tue Mar 20 22:44:09 2012
@@ -82,6 +82,11 @@ public class ProfileChecker {
selectResourceLocationByMimeType(profile.getResourceAttributes().getResLocations(),
ProfileUtils.MIME_TYPE_HTML),
true, sb);
+ //
<resLocation>http://cmds-gis.jpl.nasa.gov/Export/NetViewer.asp?Height=1024&Width=1280&BrowseImage=Aqua/MODIS
MHchla|application/gis|NetViewer</resLocation>
+ ok = ok && checkResourceAttribute("Location of type
"+ProfileUtils.MIME_TYPE_GIS,
+
selectResourceLocationByMimeType(profile.getResourceAttributes().getResLocations(),
ProfileUtils.MIME_TYPE_GIS),
+ true, sb);
+
// <elemName>mission_name</elemName>
// <elemName>sensor</elemName>
// <elemName>...</elemName>
Modified:
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileUtils.java
URL:
http://svn.apache.org/viewvc/oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileUtils.java?rev=1303182&r1=1303181&r2=1303182&view=diff
==============================================================================
---
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileUtils.java
(original)
+++
oodt/trunk/opendapps/src/main/java/org/apache/oodt/opendapps/util/ProfileUtils.java
Tue Mar 20 22:44:09 2012
@@ -74,8 +74,9 @@ public class ProfileUtils {
// The delimiter must be a character that is not commonly used
in the metadata values,
// and that it does not a special regular expression character.
// Cannot use '#' as it is used in URL anchors, such as THREDDS
urls.
+ // Cannot user '?', '&' as they are used in URL query strings.
// Cannot use '|' as it is used as multi-part separators in
encoding of metadata fields.
- PathUtils.DELIMITER = "&";
+ PathUtils.DELIMITER = "~";
}
// character separating multiple parts of the same metadata field,
@@ -97,6 +98,7 @@ public class ProfileUtils {
public final static String MIME_TYPE_OPENDAP_DDS = "application/opendap-dds";
public final static String MIME_TYPE_OPENDAP_HTML =
"application/opendap-html";
public final static String MIME_TYPE_RSS = "application/rss+xml";
+ public final static String MIME_TYPE_GIS = "application/gis";
private static final Logger LOG = Logger.getLogger(ProfileUtils.class
@@ -108,10 +110,19 @@ public class ProfileUtils {
for (ConstantSpec spec : conf.getConstSpecs()) {
if (spec.getType().equals(RES_ATTR_SPEC_TYPE)) {
try {
- String value = PathUtils.replaceEnvVariables(spec.getValue(),
datasetMet, true);
- if (StringUtils.hasText(value)) {
- setResourceAttributes(resAttr, spec.getName(), value);
+
+ // first process expanded '[@...]' instructions
+ List<String> values =
multipleEnvVariablesReplacement(spec.getValue(), datasetMet);
+
+ // then process standard '[...]' instructions
+ for (String value : values) {
+ String _value = PathUtils.replaceEnvVariables(value,
datasetMet, true);
+ if (StringUtils.hasText(_value)) {
+ setResourceAttributes(resAttr, spec.getName(),
_value);
+ }
+
}
+
} catch (Exception e) {
e.printStackTrace();
LOG.log(Level.WARNING, "Error setting field: [" + spec.getName()
@@ -123,6 +134,44 @@ public class ProfileUtils {
return resAttr;
}
+
+ /**
+ * Utility method to process environment replacement instructions of the
form '[@key]'
+ * resulting in as many output values as there are values for the
environment variable 'key'.
+ * Note that currently only one such pattern '[@key']' can be processed.
+ *
+ * @param value
+ * @param metadata
+ * @return
+ */
+ private static List<String> multipleEnvVariablesReplacement(String value,
Metadata metadata) {
+
+ List<String> newValues = new ArrayList<String>();
+
+ // regexp matching found > replace values
+ int start = value.indexOf("[@");
+ if (start>=0) {
+
+ int end = value.indexOf("]",start+2);
+ // remove '[@',']' to obtain environment variable key
+ String envKey = value.substring(start+2,end);
+ List<String> envValues = metadata.getAllMetadata(envKey);
+ if (envValues!=null) {
+ for (String envValue : envValues) {
+ // create new metadata value for this environment
replacement
+ String newValue = value.replaceAll("\\[@"+envKey+"\\]",
envValue);
+ newValues.add(newValue);
+ }
+ }
+
+ // regexp matching not found > return original value
+ } else {
+ newValues.add(value);
+ }
+
+ return newValues;
+
+ }
public static ProfileAttributes getProfileAttributes(OpendapConfig conf,
Metadata datasetMet) {
ProfileAttributes profAttr = new ProfileAttributes();