/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.server.csw.client;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.net.URL;
import java.util.AbstractMap;
import java.util.HashMap;
import java.util.Properties;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
/**
* Collections class for catalogs.
*
* The collection support both sequential and random access objects based
* on key.
*/
public class CswCatalogs {
private AbstractMap map = new HashMap();
public CswCatalogs() {
}
/**
* Add a key value pair to catalog collection.
*
* Add to catalog collection.
* @param key The key which is the url hashcode for the catalog
* @param catalog the catalog object
*/
public void addCatalog(String key, CswCatalog catalog) {
map.put(key, catalog);
}
/**
* Add a catalog using its id as a key.
* @param catalog
*/
public void addCatalog(CswCatalog catalog) {
map.put(catalog.getId(), catalog);
}
/**
* Add a new Catalog to the collection. The catalog details are also added to the
* configuration to the file.
*
* The catalog details are added in the collection. The catalog details
* are also appended in the configuration file.
* @param catalog CswCatalog
* @param filename the catalog configuration file
*/
public void addCatalogtoConfig(CswCatalog catalog, String filename) {
// NO IMPLMENTATION NEEDED
}
/**
* Delete an existing Catalog from the configuration file.
*
* The catalog details are deleted from the collection. The catalog
* details are also deleted from the configuration file.
* @param catalog CswCatalog
* @param filename the catalog configuration file
*/
public void deleteCatalogfromConfig(CswCatalog catalog, String filename) {
// NO IMPLMENTATION NEEDED
}
/**
* Loads the catalog details from configuration file.
*
* The catalog details are loaded in the collection. Duplicate or invalid
* catalog are ignored. Invalid catalog includes catalogs with profiles
* information not present in profiles collection.
* @param filename the catalog configuration file
* @param profileList the profiles collection
* @throws ParserConfigurationException
* @throws IOException
* @throws SAXException
* @throws XPathExpressionException
*/
public void loadCatalogfromConfig(String filename, CswProfiles profileList)
throws ParserConfigurationException, SAXException, IOException, XPathExpressionException {
if ((filename == null) || (filename.length() == 0)) {
// Create absolute path to file
Properties properties = new Properties();
final URL url = CswCatalogs.class.getResource("CswCommon.properties");
properties.load(url.openStream());
filename = properties.getProperty("DEFAULT_CONFIGURATION_FOLDER_PATH");
filename += properties.getProperty("DEFAULT_CATALOG_FILE");
}
String CATALOG_TAG = "CSWCatalog";
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document doc = builder.parse(filename);
NodeList nodes = doc.getElementsByTagName(CATALOG_TAG);
for (int i = 0; i < nodes.getLength(); i++) {
Node currNode = nodes.item(i);
// Parse xml and get each value
XPath xpath = XPathFactory.newInstance().newXPath();
String url = xpath.evaluate("URL", currNode);
String name = xpath.evaluate("Name", currNode);
// get profile id from the current node
String profileId = xpath.evaluate("CSWProfile", currNode);
String userName = xpath.evaluate("Credentials/Username", currNode);
String password = xpath.evaluate("Credentials/Password", currNode);
// get the corresponding profile from CswProfiles
CswProfile profile = profileList.getProfileById(profileId);
CswCatalog catalog = new CswCatalog(url, name, profile);
addCatalog(catalog);
}
}
/**
*
* @param id
*/
public CswCatalog getCatalog(String id) {
return (CswCatalog) map.get(id);
}
public CswCatalog getCatalog(int index) {
String key = null;
key = (String) map.keySet().toArray()[index];
return (CswCatalog) map.get(key);
}
public int getSize() {
return map.values().size();
}
/**
* Update the name of an existing Catalog. The name is also updated in the
* configuration file.
*
* The catalog name is updated from the collection. The catalog name is
* also updated from the configuration file.
* @param catalog CswCatalog
* @param displayname The string name
* @param surl The string updated url
* @param profile The string name
* @param filename the catalog configuration file
*/
public void updateCatalogNameinConfig(CswCatalog catalog,
String displayname, String surl, CswProfile profile, String filename) {
// NO IMPLMENTATION NEEDED
}
}