You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@oodt.apache.org by ma...@apache.org on 2017/07/16 16:15:41 UTC
[25/53] [partial] oodt git commit: Record change for OODT-836,
OODT-837.
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/catalog/src/test/java/org/apache/oodt/cas/catalog/system/impl/TestCatalogServiceLocal.java
----------------------------------------------------------------------
diff --git a/catalog/src/test/java/org/apache/oodt/cas/catalog/system/impl/TestCatalogServiceLocal.java b/catalog/src/test/java/org/apache/oodt/cas/catalog/system/impl/TestCatalogServiceLocal.java
deleted file mode 100644
index 3c6d283..0000000
--- a/catalog/src/test/java/org/apache/oodt/cas/catalog/system/impl/TestCatalogServiceLocal.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.cas.catalog.system.impl;
-
-//JDK imports
-
-import org.apache.commons.io.FileUtils;
-import org.apache.oodt.cas.catalog.exception.CatalogServiceException;
-import org.apache.oodt.cas.catalog.mapping.InMemoryIngestMapperFactory;
-import org.apache.oodt.cas.catalog.metadata.TransactionalMetadata;
-import org.apache.oodt.cas.catalog.page.Page;
-import org.apache.oodt.cas.catalog.page.PageInfo;
-import org.apache.oodt.cas.catalog.page.QueryPager;
-import org.apache.oodt.cas.catalog.page.TransactionReceipt;
-import org.apache.oodt.cas.catalog.query.QueryExpression;
-import org.apache.oodt.cas.catalog.query.parser.ParseException;
-import org.apache.oodt.cas.catalog.query.parser.QueryParser;
-import org.apache.oodt.cas.catalog.query.parser.TokenMgrError;
-import org.apache.oodt.cas.catalog.repository.MemoryBasedCatalogRepositoryFactory;
-import org.apache.oodt.cas.catalog.struct.impl.index.DataSourceIndexFactory;
-import org.apache.oodt.cas.catalog.struct.impl.index.InMemoryIndexFactory;
-import org.apache.oodt.cas.catalog.struct.impl.transaction.UuidTransactionIdFactory;
-import org.apache.oodt.cas.catalog.system.CatalogFactory;
-import org.apache.oodt.cas.metadata.Metadata;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Vector;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import junit.framework.TestCase;
-
-//OODT imports
-
-/**
- *
- * @author bfoster
- * @version $Revision$
- *
- */
-public class TestCatalogServiceLocal extends TestCase {
-
- private CatalogServiceLocal cs;
- private File testDir;
- private static Logger LOG = Logger.getLogger(TestCatalogServiceLocal.class.getName());
- public void setUp() {
- try {
- File tempFile = File.createTempFile("foo", "bar");
- tempFile.deleteOnExit();
- testDir = new File(tempFile.getParentFile(), "cas-catalog");
-
- CatalogServiceLocalFactory factory = new CatalogServiceLocalFactory();
- factory
- .setCatalogRepositoryFactory(new MemoryBasedCatalogRepositoryFactory());
- factory.setIngestMapperFactory(this
- .getOracleIngestMapperFactory(testDir.getAbsolutePath() + "/mapper"));
- factory.setOneCatalogFailsAllFail(true);
- factory.setSimplifyQueries(true);
- factory.setPluginStorageDir("/dev/null");
- factory.setRestrictIngestPermissions(false);
- factory.setRestrictQueryPermissions(false);
- factory.setTransactionIdFactory(UuidTransactionIdFactory.class
- .getCanonicalName());
- cs = factory.createCatalogService();
-
- CatalogFactory catalogFactory = new CatalogFactory();
- catalogFactory.setCatalogId("TestCatalog1");
- catalogFactory.setDictionaryFactories(null);
- catalogFactory
- .setIndexFactory(getInMemoryDSFactory(testDir.getAbsolutePath() + "/index/1/"));
- catalogFactory.setRestrictIngestPermissions(false);
- catalogFactory.setRestrictQueryPermissions(false);
- cs.addCatalog(catalogFactory.createCatalog());
- catalogFactory.setCatalogId("TestCatalog2");
- catalogFactory
- .setIndexFactory(getInMemoryDSFactory(testDir.getAbsolutePath() + "/index/2/"));
- cs.addCatalog(catalogFactory.createCatalog());
- }catch (Exception e) {
- LOG.log(Level.SEVERE, e.getMessage());
- TestCase.fail(e.getMessage());
- }
- }
-
- public void tearDown() {
- try {
- FileUtils.forceDelete(this.testDir);
- } catch (IOException e) {
- LOG.log(Level.SEVERE, e.getMessage());
- TestCase.fail(e.getMessage());
- }
- }
-
- public void testDataSourceCatalogIngestQueryAndDelete()
- throws CatalogServiceException, ParseException, TokenMgrError {
- // test ingest
- Metadata m = new Metadata();
- m.addMetadata("testkey1", "testval1");
- TransactionReceipt tr = cs.ingest(m);
- Vector<TransactionReceipt> receipts = new Vector<TransactionReceipt>();
- receipts.add(tr);
- List<TransactionalMetadata> metadatas = cs.getMetadata(receipts);
- assertEquals(metadatas.size(), 1);
- Metadata ingestedMetadata = metadatas.get(0).getMetadata();
- assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
- assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
-
- // test ingest update
- m.replaceMetadata(
- CatalogServiceLocal.CATALOG_SERVICE_TRANSACTION_ID_MET_KEY, tr.getTransactionId().toString());
- m.replaceMetadata(CatalogServiceLocal.ENABLE_UPDATE_MET_KEY, "true");
- tr = cs.ingest(m);
- receipts = new Vector<TransactionReceipt>();
- receipts.add(tr);
- metadatas = cs.getMetadata(receipts);
- assertEquals(metadatas.size(), 1);
- ingestedMetadata = metadatas.get(0).getMetadata();
- assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
- assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
-
- // test query using querypager
- QueryExpression qe = QueryParser
- .parseQueryExpression("testkey1 == 'testval1'");
- QueryPager pager = cs.query(qe);
- metadatas = cs.getNextPage(pager);
- assertEquals(metadatas.size(), 1);
- ingestedMetadata = metadatas.get(0).getMetadata();
- assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
- assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
-
- // test query using std paging
- qe = QueryParser.parseQueryExpression("testkey1 == 'testval1'");
- Page page = cs.getPage(new PageInfo(20, PageInfo.FIRST_PAGE), qe);
- metadatas = cs.getMetadata(page);
- assertEquals(metadatas.size(), 1);
- ingestedMetadata = metadatas.get(0).getMetadata();
- assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
- assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 2);
-
- // test query using std paging with catalog restriction
- qe = QueryParser.parseQueryExpression("testkey1 == 'testval1'");
- page = cs.getPage(new PageInfo(20, PageInfo.FIRST_PAGE), qe,
- Collections.singleton("TestCatalog1"));
- metadatas = cs.getMetadata(page);
- assertEquals(metadatas.size(), 1);
- ingestedMetadata = metadatas.get(0).getMetadata();
- assertEquals(ingestedMetadata.getMetadata("testkey1"), "testval1");
- assertEquals(ingestedMetadata.getAllMetadata("testkey1").size(), 1);
-
- // test delete
- m = new Metadata();
- m.addMetadata(CatalogServiceLocal.CATALOG_SERVICE_TRANSACTION_ID_MET_KEY, tr.getTransactionId().toString());
- cs.delete(m);
- assertEquals(cs.getMetadata(Collections.singletonList(tr)).size(), 0);
- }
-
- private InMemoryIngestMapperFactory getOracleIngestMapperFactory(
- String tmpDirPath) {
- String user = "sa";
- String pass = "";
- String driver = "org.hsqldb.jdbcDriver";
- String url = "jdbc:hsqldb:file:" + tmpDirPath + ";shutdown=true";
-
- InMemoryIngestMapperFactory factory = new InMemoryIngestMapperFactory();
- factory.setDriver(driver);
- factory.setJdbcUrl(url);
- factory.setPass(pass);
- factory.setUser(user);
- factory.setTablesFile(this.getClass().getResource("/test-mapper-cat.sql").getPath());
- return factory;
- }
-
- private DataSourceIndexFactory getInMemoryDSFactory(String tmpDirPath) {
- String user = "sa";
- String pass = "";
- String driver = "org.hsqldb.jdbcDriver";
- String url = "jdbc:hsqldb:file:" + tmpDirPath + ";shutdown=true";
-
- InMemoryIndexFactory indexFactory = new InMemoryIndexFactory();
- indexFactory.setDriver(driver);
- indexFactory.setJdbcUrl(url);
- indexFactory.setPass(pass);
- indexFactory.setUser(user);
- indexFactory.setTablesFile(this.getClass().getResource("/test-index-cat.sql").getPath());
- return indexFactory;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/catalog/src/test/resources/test-index-cat.sql
----------------------------------------------------------------------
diff --git a/catalog/src/test/resources/test-index-cat.sql b/catalog/src/test/resources/test-index-cat.sql
deleted file mode 100644
index fbbd46e..0000000
--- a/catalog/src/test/resources/test-index-cat.sql
+++ /dev/null
@@ -1,32 +0,0 @@
- -- Licensed to the Apache Software Foundation (ASF) under one or more
- -- contributor license agreements. See the NOTICE file distributed with
- -- this work for additional information regarding copyright ownership.
- -- The ASF 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.
-
-DROP TABLE transactions IF EXISTS;
-DROP TABLE transaction_terms IF EXISTS;
-
-CREATE TABLE transactions
-(
- transaction_id varchar(256) NOT NULL,
- transaction_date varchar(256) NOT NULL
-);
-
-CREATE TABLE transaction_terms
-(
- transaction_id varchar(256) NOT NULL,
- bucket_name varchar(256) NOT NULL,
- term_name varchar(256) NOT NULL,
- term_value varchar(1000) NOT NULL
-);
-
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/catalog/src/test/resources/test-mapper-cat.sql
----------------------------------------------------------------------
diff --git a/catalog/src/test/resources/test-mapper-cat.sql b/catalog/src/test/resources/test-mapper-cat.sql
deleted file mode 100644
index 571a36e..0000000
--- a/catalog/src/test/resources/test-mapper-cat.sql
+++ /dev/null
@@ -1,26 +0,0 @@
- -- Licensed to the Apache Software Foundation (ASF) under one or more
- -- contributor license agreements. See the NOTICE file distributed with
- -- this work for additional information regarding copyright ownership.
- -- The ASF 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.
-
-DROP TABLE CatalogServiceMapper IF EXISTS;
-
-CREATE TABLE CatalogServiceMapper (
- CAT_SERV_TRANS_ID VARCHAR(255) NOT NULL ,
- CAT_SERV_TRANS_FACTORY VARCHAR(255) NOT NULL ,
- CAT_TRANS_ID VARCHAR(255) NOT NULL ,
- CAT_TRANS_FACTORY VARCHAR(255) NOT NULL ,
- CAT_TRANS_DATE VARCHAR(255) NOT NULL ,
- CATALOG_ID VARCHAR(255) NOT NULL
-);
-
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/docker/Dockerfile
----------------------------------------------------------------------
diff --git a/docker/Dockerfile b/docker/Dockerfile
deleted file mode 100644
index 3180f57..0000000
--- a/docker/Dockerfile
+++ /dev/null
@@ -1,22 +0,0 @@
-FROM ubuntu:latest
-MAINTAINER Tom Barber
-
-ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
-
-RUN apt-get update
-RUN apt-get install -y openjdk-8-jre-headless openjdk-8-jre maven curl
-#RUN sudo apt-get install maven2
-WORKDIR /usr/src
-
-RUN curl -s http://svn.apache.org/repos/asf/oodt/trunk/mvn/archetypes/radix/src/main/resources/bin/radix | bash
-RUN mv oodt oodt-src; cd oodt-src; mvn package
-RUN mkdir /usr/src/oodt; tar -xvf /usr/src/oodt-src/distribution/target/oodt-distribution-0.1-bin.tar.gz -C /usr/src/oodt
-
-EXPOSE 8080
-EXPOSE 9000
-EXPOSE 2001
-EXPOSE 9001
-EXPOSE 9200
-EXPOSE 9002
-
-CMD cd /usr/src/oodt/bin/ && ./oodt start && tail -f /usr/src/oodt/tomcat/logs/catalina.out
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/pom.xml
----------------------------------------------------------------------
diff --git a/grid/pom.xml b/grid/pom.xml
deleted file mode 100644
index 59a355d..0000000
--- a/grid/pom.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more contributor
-license agreements. See the NOTICE.txt file distributed with this work for
-additional information regarding copyright ownership. The ASF 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.apache.oodt</groupId>
- <artifactId>oodt-core</artifactId>
- <version>1.1-SNAPSHOT</version>
- <relativePath>../core/pom.xml</relativePath>
- </parent>
- <artifactId>web-grid</artifactId>
- <packaging>war</packaging>
- <name>OODT Web Grid</name>
- <description>The OODT grid services (product and profile services) use CORBA or
- RMI as their underlying network transport. However, limitations
- of CORBA and RMI make them inappropriate for large-scale
- deployments. For one, both are procedural mechanisms, providing a
- remote interface that resembles a method call. This makes
- streaming of data from a service impossible, because there are
- limitations to the sizes of data structures that can be passed
- over a remote method call. Instead, repeated calls must be made
- to retrieve each block of a product, making transfer speeds
- horribly slow compared to HTTP or FTP. (Block-based retrieval of
- profiles was never implemented, resulting in out of memory
- conditions for large profile results, which is another problem.)
- Second, both CORBA and RMI rely on a central name registry. The
- registry makes an object independent of its network location,
- enabling a client to call it by name (looking up its last known
- location in the registry). However, this requires that server
- objects be able to make outbound network calls to the registry
- (through any outbound firewall), and that the registry accept
- those registrations (through any inbound firewall). This required
- administrative action at institutions hosting server objects and
- at the institution hosting the registry. Often, these firewall
- exceptions would change without notice as system adminstrators
- changed at each location (apparently firewall exceptions are
- poorly documented everywhere). Further, in the two major
- deployments of OODT (PDS and EDRN), server objects have almost
- never moved, nullifying any benefit of the registry. This
- project, OODT Web Grid Services, avoids the prolems of CORBA and
- RMI by using HTTP as the transport mechanism for products and
- profiles. Further, it provides a password-protected mechanism to
- add new sets of product and profile query handlers, enabling
- seamless activation of additional capabilities.</description>
- <!-- All dependencies should be listed in core/pom.xml and be ordered alphabetically by package and artifact.
- Once the dependency is in the core pom, it can then be used in other modules without the version tags.
- For example, within core/pom.xml:
-
- <dependency>
- <groupId>com.amazonaws</groupId>
- <artifactId>aws-java-sdk</artifactId>
- <version>1.7.4</version>
- </dependency>
-
- Elsewhere in the platform:
- <dependency>
- <groupId>com.amazonaws</groupId>
- <artifactId>aws-java-sdk</artifactId>
- </dependency>
-
- Where possible the same dependency version should be used across the whole platform but if required the version
- can be overridden in a specific pom and should have a comment explaing why the version has been overridden
- -->
- <dependencies>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.jena</groupId>
- <artifactId>apache-jena-libs</artifactId>
- <type>pom</type>
- </dependency>
- <dependency>
- <groupId>org.apache.oodt</groupId>
- <artifactId>oodt-commons</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.oodt</groupId>
- <artifactId>oodt-product</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.oodt</groupId>
- <artifactId>oodt-profile</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.oodt</groupId>
- <artifactId>oodt-xmlquery</artifactId>
- </dependency>
- <dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- </dependency>
- <dependency>
- <groupId>xerces</groupId>
- <artifactId>xercesImpl</artifactId>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-war-plugin</artifactId>
- <version>2.5</version>
- <configuration>
- <webResources />
- <warSourceDirectory>src/main/webapp</warSourceDirectory>
- </configuration>
- </plugin>
- </plugins>
- </build>
- <scm>
- <!--<connection>scm:svn:https://svn.apache.org/repos/asf/oodt/trunk/grid</connection>
- <developerConnection>scm:svn:https://svn.apache.org/repos/asf/oodt/trunk/grid</developerConnection>
- <url>http://svn.apache.org/viewvc/oodt/trunk/grid</url>-->
- <tag>0.13-SNAPSHOT</tag>
- </scm>
-</project>
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/AuthenticationRequiredException.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/AuthenticationRequiredException.java b/grid/src/main/java/org/apache/oodt/grid/AuthenticationRequiredException.java
deleted file mode 100755
index 3c152b8..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/AuthenticationRequiredException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-/**
- * Exception thrown to indicate that authentication is required to continue.
- */
-public class AuthenticationRequiredException extends Exception {
- /**
- * Creates a new <code>AuthenticationRequiredException</code> instance.
- */
- public AuthenticationRequiredException() {
- super("Authentication required");
- }
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/ConfigBean.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/ConfigBean.java b/grid/src/main/java/org/apache/oodt/grid/ConfigBean.java
deleted file mode 100755
index ef4ca62..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/ConfigBean.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import java.io.Serializable;
-import java.util.List;
-import java.util.Properties;
-
-/**
- * Bean containing login status for and configuration info.
- */
-public class ConfigBean implements Serializable {
- /**
- * Return true is administrator is authenticated.
- *
- * @return True if authentic, false otherwise.
- */
- public boolean isAuthentic() {
- return authentic;
- }
-
- /**
- * Set whether the administrator's been authenticated.
- *
- * @param authentic
- * True if authentic, false otherwise.
- */
- void setAuthentic(boolean authentic) {
- this.authentic = authentic;
- }
-
- /**
- * Get any message to display. This should never be null.
- *
- * @return A message to display
- */
- public String getMessage() {
- return message;
- }
-
- /**
- * Set the message to display.
- *
- * @param message
- * Message to display.
- */
- public void setMessage(String message) {
- if (message == null) {
- throw new IllegalArgumentException("message cannot be null");
- }
- this.message = message;
- }
-
- /**
- * Get the configuration of web-grid.
- *
- * @return a <code>Configuration</code> value.
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- public Configuration getConfiguration()
- throws AuthenticationRequiredException {
- checkAuthenticity();
- return configuration;
- }
-
- /**
- * Tell if HTTPS is required to access the web-grid configuration.
- *
- * @return True if HTTPS is required to access the web-grid configuration.
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- public boolean isHttpsRequired() throws AuthenticationRequiredException {
- checkAuthenticity();
- return configuration.isHTTPSrequired();
- }
-
- /**
- * Tell if admin access can come only from the localhost.
- *
- * @return True if admin access can come only from the localhost.
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- public boolean isLocalhostRequired() throws AuthenticationRequiredException {
- checkAuthenticity();
- return configuration.isLocalhostRequired();
- }
-
- /**
- * Get the list of {@link ProductServer}s that have been installed in this
- * container.
- *
- * @return a <code>List</code> of {@link ProductServer}s.
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- public List getProductServers() throws AuthenticationRequiredException {
- checkAuthenticity();
- return configuration.getProductServers();
- }
-
- /**
- * Get the list of {@link ProfileServer}s that have been installed in this
- * container.
- *
- * @return a <code>List</code> of {@link ProfileServer}s.
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- public List getProfileServers() throws AuthenticationRequiredException {
- checkAuthenticity();
- return configuration.getProfileServers();
- }
-
- /**
- * Set the configuration this bean will use.
- *
- * @param configuration
- * a <code>Configuration</code> value.
- */
- void setConfiguration(Configuration configuration) {
- this.configuration = configuration;
- }
-
- /**
- * Get the properties defined for this container.
- *
- * @return a <code>Properties</code> value.
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- public Properties getProperties() throws AuthenticationRequiredException {
- checkAuthenticity();
- return configuration.getProperties();
- }
-
- /**
- * Check if the administrator is authentic. This method does nothing if the
- * administrator is authentic, but throws an exception if not.
- *
- * @throws AuthenticationRequiredException
- * if the administrator's not authenticated.
- */
- private void checkAuthenticity() throws AuthenticationRequiredException {
- if (isAuthentic() && configuration != null) {
- return;
- }
- message = "";
- throw new AuthenticationRequiredException();
- }
-
- /** True if administrator is authentic. */
- private boolean authentic;
-
- /** Any message to display. */
- private String message = "";
-
- /** The configuration for this container. */
- private transient Configuration configuration;
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/ConfigServlet.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/ConfigServlet.java b/grid/src/main/java/org/apache/oodt/grid/ConfigServlet.java
deleted file mode 100755
index 8a5b0a3..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/ConfigServlet.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Controller servlet for making changes to configuration.
- */
-public class ConfigServlet extends GridServlet {
- /**
- * Handle updates to a configuration by saving them and directing back to the
- * config page.
- *
- * @param req
- * a <code>HttpServletRequest</code> value.
- * @param res
- * a <code>HttpServletResponse</code> value.
- * @throws ServletException
- * if an error occurs.
- * @throws IOException
- * if an error occurs.
- */
- public void doPost(HttpServletRequest req, HttpServletResponse res)
- throws ServletException, IOException {
- Configuration config = getConfiguration(); // Get the singleton
- // configuration
- if (!approveAccess(config, req, res)) {
- return; // Check if the user can access this page
- }
-
- ConfigBean cb = getConfigBean(req); // Get the bean
- cb.setMessage(""); // Clear out any message
- if (!cb.isAuthentic()) {
- throw new ServletException(new AuthenticationRequiredException());
- }
- boolean needSave = false; // Assume no changes for now
-
- String newPass = req.getParameter("password"); // See if she wants to change
- // password
- if (newPass != null && newPass.length() > 0) { // Got a password, and it's
- // not empty?
- config.setPassword(newPass.getBytes()); // Yes, set its bytes
- needSave = true; // We need to save
- }
-
- boolean https = config.isHTTPSrequired(); // Are we currently using https?
- String httpsParam = req.getParameter("https"); // Get her https param
- boolean newHttps = httpsParam != null && "on".equals(httpsParam); // See if
- // she
- // wants
- // to use
- // https
- // or not
- if (https != newHttps) { // Different?
- config.setHTTPSrequired(newHttps); // Yes, set the new state
- needSave = true; // We need to save
- }
-
- boolean local = config.isLocalhostRequired(); // Are we requiring localhost?
- String localhostParam = req.getParameter("localhost"); // Get her localhost
- // param
- boolean newLocal = localhostParam != null && "on".equals(localhostParam); // See
- // if
- // she
- // wants
- // to
- // require
- // localhost
- if (local != newLocal) { // Different?
- config.setLocalhostRequired(newLocal); // Yes, set the new state
- needSave = true; // We need to save
- }
-
- String newKey = req.getParameter("newkey"); // See if she's got a new
- // property
- if (newKey != null && newKey.length() > 0) { // And make sure it's nonempty
- String newVal = req.getParameter("newval"); // Got one, get its value
- if (newVal == null) {
- newVal = ""; // Make sure it's at least an empty string
- }
- config.getProperties().setProperty(newKey, newVal); // Set the new
- // property
- needSave = true; // We need to save
- }
-
- needSave |= updateProperties(config.getProperties(), // Make any updates to
- // existing property
- req.getParameterMap()); // values, and see note if we need to save
- try {
- needSave |= updateServers(config, req.getParameterMap(), 'd'); // Same
- // goes for
- // product
- // servers
- needSave |= updateServers(config, req.getParameterMap(), 'm'); // And
- // profile
- // servers
- needSave |= updateCodeBases(config, req.getParameterMap()); // And for
- // code bases
- } catch (MalformedURLException ex) { // Make sure code base URLs are OK
- cb.setMessage("Code bases must be valid URLs (" // Not OK?
- + ex.getMessage() + "); no changes made"); // Let user know via a
- // message
- req.getRequestDispatcher("config.jsp").forward(req, res); // And make no
- // changes until
- // she fixes it
- return;
- }
-
- if (needSave) { // Do we need to save?
- config.save(); // Then do it already!
- cb.setMessage("Changes saved."); // And let the user know
- } else {
- cb.setMessage("No changes made."); // Oh, no changes were made, let user
- // know
- }
- req.getRequestDispatcher("config.jsp").forward(req, res); // Back to the
- // config page
- }
-
- /**
- * Update changes to the code bases.
- *
- * @param config
- * a <code>Configuration</code> value.
- * @param params
- * a <code>Map</code> value.
- * @return True if changes need to be saved.
- * @throws MalformedURLException
- * if an error occurs.
- */
- private boolean updateCodeBases(Configuration config, Map params)
- throws MalformedURLException {
- boolean needSave = false; // Assume no change
- List codeBases = config.getCodeBases(); // Get the current code bases
-
- List toRemove = new ArrayList(); // Hold indexes of code bases to remove
- for (Object o : params.entrySet()) { // For each
- // parameter
- Map.Entry entry = (Map.Entry) o; // Get its entry
- String key = (String) entry.getKey(); // And its name
- String value = ((String[]) entry.getValue())[0]; // And its zeroth value
- if (key.startsWith("delcb-") && "on".equals(value)) { // If it's checked
- Integer index = Integer.valueOf(key.substring(6)); // Parse out the index
- toRemove.add(index); // Add it to the list
- }
- }
- if (!toRemove.isEmpty()) { // And if we have any indexes
- Collections.sort(toRemove); // Sort 'em and put 'em in reverse ...
- Collections.reverse(toRemove); // ... order so we can safely remove them
- for (Object aToRemove : toRemove) { // For each index
- // to remove
- int index = (Integer) aToRemove; // Get the index value
- codeBases.remove(index); // And buh-bye.
- }
- needSave = true; // Definitely need to save changes now
- }
-
- String[] newCBs = (String[]) params.get("newcb"); // Was there a new code
- // base specified?
- if (newCBs != null && newCBs.length == 1) { // And was there exactly one
- // value?
- String newCB = newCBs[0]; // Get that exactly one value
- if (newCB != null && newCB.length() > 0) { // Is it nonnull and nonempty?
- URL newURL = new URL(newCB); // Treat is as an URL
- codeBases.add(newURL); // Add it to the list
- needSave = true; // Ad we gotta save
- }
- }
- return needSave;
- }
-
- /**
- * Update the list of product/profile servers based on request parameters.
- *
- * @param config
- * System configuration
- * @param params
- * Request parameters.
- * @param type
- * <code>d</code> (data) if product servers, <code>m</code>
- * (metadata) if profile servers
- * @return True if any changes were made, false if no changes were made
- */
- private boolean updateServers(Configuration config, Map params, char type) {
- List servers = type == 'd' ? config.getProductServers() : config
- .getProfileServers();
- boolean needSave = false; // Assume no changes for now
-
- List toRemove = new ArrayList(); // Start with empty list of indexes to
- // remove
- for (Object o : params.entrySet()) { // Go
- // through
- // each
- // parameter
- Map.Entry entry = (Map.Entry) o; // Get its key/value
- String name = (String) entry.getKey(); // The key is a String
- if (name.startsWith(type + "rm-")) { // Is it an "drm-" or "mrm-"?
- Integer index = Integer.valueOf(name.substring(4)); // Yes, get it sindex
- toRemove.add(index); // Add it to the list
- }
- }
-
- if (!toRemove.isEmpty()) { // Got any to remove?
- Collections.sort(toRemove); // We need to go through them in reverse ord-
- Collections.reverse(toRemove); // -er, so that removals don't shift
- // indexes
- for (Object aToRemove : toRemove) { // For each index
- int index = (Integer) aToRemove; // Get its int value
- servers.remove(index); // and buh-bye
- }
- needSave = true; // Gotta save after all that, whew.
- }
-
- if (params.containsKey(type + "-newcn")) { // Adding a new server?
- String[] newClasses = (String[]) params.get(type + "-newcn"); // And the
- // new class
- // name
- if (newClasses != null && newClasses.length == 1) { // Are present and
- // there's only one of
- // each
- String newClass = newClasses[0]; // Get the new class
- if (newClass != null && newClass.length() > 0) { // And nonempty
- Server server;
- if (type == 'd') // If it's data
- {
- server = new ProductServer(config, newClass); // It's a product
- }
-// server
- else
- // otherwise it's metadata
- {
- server = new ProfileServer(config, newClass); // Which is a profile
- }
- // server
- servers.add(server); // Add it to the set of servers
- needSave = true; // And after all this, we need to save!
- }
- }
- }
-
- return needSave;
- }
-
- /**
- * Update properties based on request parameters.
- *
- * @param props
- * <code>Properties</code> to update
- * @param params
- * Request parameters
- * @return True if changes need to be saved, false otherwise
- */
- private boolean updateProperties(Properties props, Map params) {
- boolean needSave = false; // Assume no save for now
- for (Object o : params.entrySet()) { // Go
- // through
- // each
- // request
- // parameter
- Map.Entry entry = (Map.Entry) o; // Get the key/value
- String name = (String) entry.getKey(); // Key is always a string
- String newValue = ((String[]) entry.getValue())[0]; // Value is String[],
- // get the zeroth
- if (name.startsWith("val-")) { // If the param is "val-"
- String key = name.substring(4); // Then find the key
- if (props.containsKey(key)) { // If that key exists
- String value = props.getProperty(key); // Find its value
- if (value == null || !value.equals(newValue)) {// Are they different?
- props.setProperty(key, newValue); // Yes, set the new value
- needSave = true; // And we need to save
- }
- }
- } else if (name.startsWith("del-")) { // If the param is "del-"
- String key = name.substring(4); // Then find the key
- if (props.containsKey(key)) { // If that key exists
- props.remove(key); // Then remove its mapping
- needSave = true; // And we need to save
- }
- }
- }
- return needSave;
- }
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/Configuration.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/Configuration.java b/grid/src/main/java/org/apache/oodt/grid/Configuration.java
deleted file mode 100755
index ed82943..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/Configuration.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Serializable;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.Text;
-import org.xml.sax.SAXException;
-
-import org.apache.oodt.commons.util.Base64;
-
-/**
- * web-grid configuration. This holds all the runtime configuration of profile servers,
- * product servers, properties, and other settings for the web-grid container.
- *
- */
-public class Configuration implements Serializable {
- /**
- * Creates a new <code>Configuration</code> instance.
- *
- * @param file File containing the serialized configuration.
- * @throws IOException if an I/O error occurs.
- * @throws SAXException if the file can't be parsed.
- */
- public Configuration(File file) throws IOException, SAXException {
- this.file = file;
- if (file.isFile() && file.length() > 0) {
- parse(file);
- }
- }
-
- /**
- * Convert the configuration to XML.
- *
- * @param owner Owning document.
- * @return XML representation of this configuration.
- */
- public Node toXML(Document owner) {
- Element elem = owner.createElement("configuration"); // <configuration>
- elem.setAttribute("xmlns", NS); // Set default namespace
- elem.setAttribute("https", httpsRequired? "true" : "false"); // Add https attribute
- elem.setAttribute("localhost", localhostRequired? "true" : "false"); // Add localhost attribute
-
- if (password != null && password.length > 0) // If we have a password
- {
- elem.setAttribute("password", encode(password)); // Add passowrd attribute
- }
-
- for (Object productServer : productServers) { // For each product server
- ProductServer ps = (ProductServer) productServer; // Get the product server
- elem.appendChild(ps.toXML(owner)); // And add it under <configuration>
- }
-
- for (Object profileServer : profileServers) { // For each profile server
- ProfileServer ps = (ProfileServer) profileServer; // Get the profile server
- elem.appendChild(ps.toXML(owner)); // And add it under the <configuration>
- }
-
- if (!codeBases.isEmpty()) { // Got any code bases?
- Element cbs = owner.createElement("codeBases"); // Boo yah. Make a parent for 'em
- elem.appendChild(cbs); // Add parent
- for (Object codeBase : codeBases) { // Then, for each code base
- URL url = (URL) codeBase; // Get the URL to it
- Element cb = owner.createElement("codeBase"); // And make a <codeBase> for it
- cb.setAttribute("url", url.toString()); // And an "url" attribute
- cbs.appendChild(cb); // Add it
- }
- }
-
- if (!properties.isEmpty()) { // If we have any properties>
- Element props = owner.createElement("properties"); // Add <properties> under <configuration>
- props.setAttribute("xml:space", "preserve"); // And make sure space is properly preserved
- elem.appendChild(props); // Add the space attribute
- for (Map.Entry<Object, Object> objectObjectEntry : properties.entrySet()) { // For each property
- Map.Entry entry =
- (Map.Entry) objectObjectEntry; // Get the property key/value pair
- String key = (String) entry.getKey(); // Key is always a String
- String value = (String) entry.getValue(); // So is the value
- Element prop = owner.createElement("property"); // Create a <property> element
- props.appendChild(prop); // Add it under the <properties>
- prop.setAttribute("key", key); // Set the key as an attribute
- Text text = owner.createTextNode(value); // Make text to hold the value
- prop.appendChild(text); // Add it under the <property>
- }
- }
- return elem;
- }
-
- /**
- * Get the properties.
- *
- * @return a <code>Properties</code> value.
- */
- public Properties getProperties() {
- return properties;
- }
-
- /**
- * Is localhost access required for the configuration?
- *
- * @return True if the configuration must be accessed from the localhost, false otherwise.
- */
- public boolean isLocalhostRequired() {
- return localhostRequired;
- }
-
- /**
- * Is https access required for the configuration?
- *
- * @return True if the configuration must be accessed via https, false if http is OK.
- */
- public boolean isHTTPSrequired() {
- return httpsRequired;
- }
-
- /**
- * Set if https is required to access the configuration.
- *
- * @param required True if the configuration must be accessed via https, false if http is OK.
- */
- public void setHTTPSrequired(boolean required) {
- httpsRequired = required;
- }
-
- /**
- * Set if localhost is required to access the configuration.
- *
- * @param required True if the configuration must be accessed from the localhost, false otherwise.
- */
- public void setLocalhostRequired(boolean required) {
- localhostRequired = required;
- }
-
- /**
- * Return the code bases.
- *
- * @return a <code>List</code> of {@link URL}s.
- */
- public List getCodeBases() {
- return codeBases;
- }
-
- /**
- * Get the product servers.
- *
- * @return a <code>List</code> of {@link ProductServer}s.
- */
- public List getProductServers() {
- return productServers;
- }
-
- /**
- * Get the profile servers.
- *
- * @return a <code>List</code> of {@link ProfileServer}s.
- */
- public List getProfileServers() {
- return profileServers;
- }
-
- /**
- * Get the administrator password.
- *
- * @return Administrator password.
- */
- public byte[] getPassword() {
- return password;
- }
-
- /**
- * Set the administrator password.
- *
- * @param password Administrator password.
- */
- public void setPassword(byte[] password) {
- if (password == null) {
- throw new IllegalArgumentException("Non-null passwords not allowed");
- }
- this.password = password;
- }
-
- /**
- * Save the configuration.
- *
- * @throws IOException if an I/O error occurs.
- */
- public synchronized void save() throws IOException {
- BufferedWriter writer = null; // Start w/no writer
- try { // Then try ...
- writer = new BufferedWriter(new FileWriter(file)); // Create a writer
- Document doc; // As for the doc...
- synchronized (DOCUMENT_BUILDER) { // Using the document builder...
- doc = DOCUMENT_BUILDER.newDocument(); // Create an empty document
- }
- Node root = toXML(doc); // Convert this config to XML
- doc.appendChild(root); // Add it to the doc
- DOMSource source = new DOMSource(doc); // Use the source Luke
- StreamResult result = new StreamResult(writer); // And serialize it to the writer
- TRANSFORMER.transform(source, result); // Serialize
- } catch (TransformerException ex) {
- throw new IllegalStateException("Unexpected TransformerException: " + ex.getMessage());
- } finally {
- if (writer != null) {
- try { // And if we got a writer, try ...
- writer.close(); // to close it
- } catch (IOException ignore) {
- } // Ignoring any error
- }
- }
- }
-
- /**
- * Parse a serialized configuration document.
- *
- * @param file File to parse
- * @throws IOException if an I/O error occurs.
- * @throws SAXException if a parse error occurs.
- */
- private void parse(File file) throws IOException, SAXException {
- Document doc; // Start with a doc ...
- synchronized (DOCUMENT_BUILDER) { // And using the DOCUMENT_BUILDER
- doc = DOCUMENT_BUILDER.parse(file); // Try to parse the file
- }
- Element root = doc.getDocumentElement(); // Assume the root element is <configuration>
-
- String httpsAttr = root.getAttribute("https"); // Get the https attribute
- httpsRequired = httpsAttr != null && "true".equals(httpsAttr); // See if it's "true"
-
- String localhostAttr = root.getAttribute("localhost"); // Get the localhost attribute
- localhostRequired = localhostAttr != null && "true".equals(localhostAttr); // See if it's "true"
-
- String passwordAttr = root.getAttribute("password"); // Get the password attribute
- if (passwordAttr != null && passwordAttr.length() > 0) // If it's there, and non-empty
- {
- password = decode(passwordAttr); // Then decode it
- }
-
- NodeList children = root.getChildNodes(); // Get the child nodes
- for (int i = 0; i < children.getLength(); ++i) { // For each child node
- Node child = children.item(i); // Get the child
- if (child.getNodeType() == Node.ELEMENT_NODE) { // An element?
- if ("server".equals(child.getNodeName())) { // A <server>?
- Server server = Server.create(this, (Element) child); // Create the correct server
-
- // Keep these in separate sets?
- if (server instanceof ProductServer) // Is a product server?
- {
- productServers.add(server); // Add to product servers
- } else if (server instanceof ProfileServer) // Is a profile server?
- {
- profileServers.add(server); // Add to profile servers
- } else {
- throw new IllegalArgumentException("Unexpected server type " + server + " in " + file);
- }
- } else if ("properties".equals(child.getNodeName())) { // Is it a <properties>?
- NodeList props = child.getChildNodes(); // Get its children
- for (int j = 0; j < props.getLength(); ++j) { // For each child
- Node node = props.item(j); // Get the chld
- if (node.getNodeType() == Node.ELEMENT_NODE // And element?
- && "property".equals(node.getNodeName())) { // And it's <property>?
- Element propNode = (Element) node; // Great, use it as an element
- String key = propNode.getAttribute("key"); // Get its key attribute
- if (key == null || key.length() == 0) // Make sure it's there
- {
- throw new SAXException("Required 'key' attribute missing from "
- + "<property> element");
- }
- properties.setProperty(key, text(propNode)); // And set it
- }
- }
- } else if ("codeBases".equals(child.getNodeName())) { // And yadda
- NodeList cbs = child.getChildNodes(); // yadda
- for (int j = 0; j < cbs.getLength(); ++j) { // yadda.
- Node node = cbs.item(j);
- if (node.getNodeType() == Node.ELEMENT_NODE
- && "codeBase".equals(node.getNodeName())) {
- Element cbNode = (Element) node;
- String u = cbNode.getAttribute("url");
- if (u == null || u.length() == 0) {
- throw new SAXException("Required 'url' attribute missing from "
- + "<codeBase> element");
- }
- try {
- codeBases.add(new URL(u));
- } catch (MalformedURLException ex) {
- throw new SAXException("url attribute " + u + " isn't a valid URL");
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Encode a password. This just hides it so it's not plain text, but it's just as
- * easy to decode it if you have a base-64 decoder handy.
- *
- * @param password a <code>byte[]</code> value.
- * @return a <code>String</code> value.
- */
- static String encode(byte[] password) {
- return new String(Base64.encode(password));
- }
-
- /**
- * Decode a password.
- *
- * @param password a <code>String</code> value.
- * @return a <code>byte[]</code> value.
- */
- static byte[] decode(String password) {
- return Base64.decode(password.getBytes());
- }
-
- /**
- * Get the text under an XML node.
- *
- * @param node a <code>Node</code> value.
- * @return a <code>String</code> value.
- */
- private static String text(Node node) {
- StringBuffer b = new StringBuffer();
- text0(node, b);
- return b.toString();
- }
-
- /**
- * Get the text from an XML node into a StringBuffer.
- *
- * @param node a <code>Node</code> value.
- * @param b a <code>StringBuffer</code> value.
- */
- private static void text0(Node node, StringBuffer b) {
- NodeList children = node.getChildNodes();
- for (int i = 0; i < children.getLength(); ++i) {
- text0(children.item(i), b);
- }
- short type = node.getNodeType();
- if (type == Node.CDATA_SECTION_NODE || type == Node.TEXT_NODE) {
- b.append(node.getNodeValue());
- }
- }
-
- public boolean equals(Object obj) {
- if (obj == this) {
- return true;
- }
- if (obj instanceof Configuration) {
- Configuration rhs = (Configuration) obj;
- return codeBases.equals(rhs.codeBases) && productServers.equals(rhs.productServers)
- && profileServers.equals(rhs.profileServers) && Arrays.equals(password, rhs.password)
- && httpsRequired == rhs.httpsRequired && localhostRequired == rhs.localhostRequired
- && properties.equals(rhs.properties);
- }
- return false;
- }
-
- public int hashCode() {
- return codeBases.hashCode() ^ productServers.hashCode() ^ profileServers.hashCode();
- }
-
- /** List of {@link URL}s to code bases. */
- private List codeBases = new ArrayList();
-
- /** List of {@link ProductServer}s. */
- private List productServers = new ArrayList();
-
- /** List of {@link ProfileServer}s. */
- private List profileServers = new ArrayList();
-
- /** Admin password. */
- private byte[] password = DEFAULT_PASSWORD;
-
- /** True if https is requried. */
- private boolean httpsRequired;
-
- /** True if localhost access is required. */
- private boolean localhostRequired;
-
- /** Properties to set. */
- private Properties properties = new Properties();
-
- /** Where to save the file. */
- private transient File file;
-
- /** Default password. */
- static final byte[] DEFAULT_PASSWORD = { (byte)'h', (byte)'a', (byte)'n', (byte)'a', (byte)'l', (byte)'e', (byte)'i' };
-
- /** XML namespace */
- public static final String NS = "http://oodt.jpl.nasa.gov/web-grid/ns/";
-
- /** Sole document builder we'll need. */
- private static final DocumentBuilder DOCUMENT_BUILDER;
-
- /** Sole transfomer we'll need. */
- private static final Transformer TRANSFORMER;
-
- static {
- try {
- DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
- documentBuilderFactory.setNamespaceAware(true);
- documentBuilderFactory.setValidating(false);
- documentBuilderFactory.setIgnoringElementContentWhitespace(false);
- documentBuilderFactory.setExpandEntityReferences(true);
- documentBuilderFactory.setIgnoringComments(true);
- documentBuilderFactory.setCoalescing(true);
- DOCUMENT_BUILDER = documentBuilderFactory.newDocumentBuilder();
-
- TransformerFactory transformerFactory = TransformerFactory.newInstance();
- TRANSFORMER = transformerFactory.newTransformer();
- TRANSFORMER.setOutputProperty(OutputKeys.METHOD, "xml");
- TRANSFORMER.setOutputProperty(OutputKeys.VERSION, "1.0");
- TRANSFORMER.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
- TRANSFORMER.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
- TRANSFORMER.setOutputProperty(OutputKeys.INDENT, "yes");
- TRANSFORMER.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
- } catch (ParserConfigurationException ex) {
- throw new IllegalStateException("Cannot create document builder");
- } catch (TransformerConfigurationException ex) {
- throw new IllegalStateException("Cannot create transformer");
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/GridServlet.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/GridServlet.java b/grid/src/main/java/org/apache/oodt/grid/GridServlet.java
deleted file mode 100755
index 8f5ccdd..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/GridServlet.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import java.io.File;
-import java.io.IOException;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import org.xml.sax.SAXException;
-
-/**
- * Grid servlet is an abstract servlet that provides basic behavior (configuration access)
- * for grid servlets.
- */
-public abstract class GridServlet extends HttpServlet {
- /**
- * By default, grid servlets are POST only, so GETs get you the welcome page.
- *
- * @param req a <code>HttpServletRequest</code> value.
- * @param res a <code>HttpServletResponse</code> value.
- * @throws IOException if an error occurs.
- * @throws ServletException if an error occurs.
- */
- public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
- req.getRequestDispatcher("index.html").forward(req, res);
- }
-
- /**
- * Get the configuration.
- *
- * @return a <code>Configuration</code> value.
- * @throws ServletException if an error occurs.
- * @throws IOException if an error occurs.
- */
- protected Configuration getConfiguration() throws ServletException, IOException {
- if (configuration != null) {
- return configuration;
- }
- String path = getServletContext().getInitParameter("org.apache.oodt.grid.GridServlet.config");
- if (path == null) {
- path = getServletContext().getRealPath("/WEB-INF/config.xml");
- }
- if (path == null) {
- throw new ServletException("The config.xml file can't be accessed. Are we running from a war file!??!");
- }
- File file = new File(path);
- Configuration c;
- try {
- c = new Configuration(file);
- } catch (SAXException ex) {
- throw new ServletException("Cannot parse config.xml file", ex);
- }
- synchronized (GridServlet.class) {
- while (configuration == null) {
- configuration = c;
- }
- }
- return configuration;
- }
-
- /**
- * Get the config bean.
- *
- * @param req a <code>HttpServletRequest</code> value.
- * @return a <code>ConfigBean</code> value.
- * @throws ServletException if an error occurs.
- * @throws IOException if an error occurs.
- */
- protected ConfigBean getConfigBean(HttpServletRequest req) throws ServletException, IOException {
- HttpSession session = req.getSession(/*create*/true);
- ConfigBean cb = (ConfigBean) session.getAttribute("cb");
- if (cb == null) {
- cb = new ConfigBean();
- session.setAttribute("cb", cb);
- }
- Configuration config = getConfiguration();
- cb.setConfiguration(config);
- return cb;
- }
-
- /**
- * Check if administrative access is allowed. This examines the request scheme
- * (http, ftp, https, etc.) and sees if https is required by the configuration.
- * It also checks the remote host and sees if localhost access is required.
- *
- * @param config a <code>Configuration</code> value.
- * @param req a <code>HttpServletRequest</code> value.
- * @param res a <code>HttpServletResponse</code> value.
- * @return True if access is approved, false otherwise.
- * @throws IOException if an error occurs.
- */
- protected boolean approveAccess(Configuration config, HttpServletRequest req, HttpServletResponse res) throws IOException {
- if (config.isHTTPSrequired() && !"https".equals(req.getScheme())) {
- res.sendError(HttpServletResponse.SC_FORBIDDEN, "https required");
- return false;
- }
-
- if (config.isLocalhostRequired() && !Utility.isLocalhost(req.getRemoteHost())) {
- res.sendError(HttpServletResponse.SC_FORBIDDEN, "localhost access only");
- return false;
- }
-
- return true;
- }
-
- /** Singleton configuration. */
- private static volatile Configuration configuration;
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/LoginServlet.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/LoginServlet.java b/grid/src/main/java/org/apache/oodt/grid/LoginServlet.java
deleted file mode 100755
index 01e186a..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/LoginServlet.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import java.io.IOException;
-import java.util.Arrays;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-/**
- * Controller servlet that authenticates the administrator password.
- *
- */
-public class LoginServlet extends GridServlet {
- /**
- * Handle authentication from an administrator.
- *
- * @param req a <code>HttpServletRequest</code> value.
- * @param res a <code>HttpServletResponse</code> value.
- * @throws ServletException if an error occurs.
- * @throws IOException if an error occurs.
- */
- public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
- Configuration config = getConfiguration(); // Get configuration
- if (!approveAccess(config, req, res)) {
- return; // Do https, localhost checking first
- }
-
- ConfigBean cb = getConfigBean(req); // Get bean
- if (cb.isAuthentic()) { // Already authentic?
- req.getRequestDispatcher("config.jsp").forward(req, res); // Back to the config page with you!
- return;
- }
-
- String password = req.getParameter("password"); // Get submitted password
- if (password == null) {
- password = ""; // If none, use an empty string
- }
- byte[] bytes = password.getBytes(); // Get the bytes
- if (!Arrays.equals(config.getPassword(), bytes)) { // Compare to stored password bytes
- cb.setMessage("Password incorrect"); // Not equal! Set message.
- throw new ServletException(new AuthenticationRequiredException());
- } else {
- cb.setMessage(""); // Equal, clear message
- cb.setAuthentic(true); // You are now authenticated
- req.getRequestDispatcher("config.jsp").forward(req, res); // To the config page with you!
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/ProductQueryServlet.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/ProductQueryServlet.java b/grid/src/main/java/org/apache/oodt/grid/ProductQueryServlet.java
deleted file mode 100755
index 20408af..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/ProductQueryServlet.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import org.apache.oodt.product.HttpRedirectException;
-import org.apache.oodt.product.LargeProductQueryHandler;
-import org.apache.oodt.product.ProductException;
-import org.apache.oodt.product.QueryHandler;
-import org.apache.oodt.product.Retriever;
-import org.apache.oodt.xmlquery.LargeResult;
-import org.apache.oodt.xmlquery.Result;
-import org.apache.oodt.xmlquery.XMLQuery;
-
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-
-/**
- * Product query servlet handles product queries. It always returns the first matching
- * product, if any. If no handler can provide a product, it returns 404 Not Found. If
- * there are no query handlers, it returns 404 Not Found.
- *
- */
-public class ProductQueryServlet extends QueryServlet {
-
- public static final int INT = 512;
-
- /** {@inheritDoc} */
- protected List getServers(Configuration config) {
- return config.getProductServers();
- }
-
- /** {@inheritDoc} */
- protected void handleQuery(XMLQuery query, List handlers, HttpServletRequest req, HttpServletResponse res)
- throws IOException {
- if (handlers.isEmpty()) {
- res.sendError(HttpServletResponse.SC_NOT_FOUND, "no query handlers available to handle query");
- return;
- }
-
- try { // OK, let's try
- for (Object handler1 : handlers) { // Try each query handler
- QueryHandler handler = (QueryHandler) handler1; // Get the query handler
- query = handler.query(query); // Give it the query
- if (!query.getResults().isEmpty()) { // Did it give any result?
- Result result = (Result) query.getResults().get(0); // Yes, get the result
- deliverResult(handler, result, res); // And deliver it
- return; // Done!
- }
- }
- } catch (ProductException ex) {
- if (ex instanceof HttpRedirectException) {
- HttpRedirectException hre = (HttpRedirectException) ex;
- res.sendRedirect(hre.getLocation());
- } else {
- res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, ex.getMessage());
- }
- return;
- }
-
- res.sendError(HttpServletResponse.SC_NOT_FOUND, "no matching products from any query handler");
- }
-
- /**
- * Deliver a result. This streams the product data.
- *
- * @param handler Which handler produced the result.
- * @param result The result.
- * @param res The HTTP response to which to send the result data.
- * @throws IOException if an error occurs.
- */
- private void deliverResult(QueryHandler handler, Result result, HttpServletResponse res) throws IOException {
- characterize(handler, result, res); // First, describe it using HTTP headers
- if (result instanceof LargeResult) { // Is it a large result?
- LargeResult lr = (LargeResult) result; // Yes, this is gonna take some special work
- LargeProductQueryHandler lpqh = (LargeProductQueryHandler) handler; // First treat 'em as large
- ProductRetriever retriever = new ProductRetriever(lpqh); // Large ones need a retriever
- lr.setRetriever(retriever); // Set the retriever
- }
- BufferedInputStream in = null; // Start with no input stream
- try { // Then try ...
- in = new BufferedInputStream(result.getInputStream()); // To open the input stream
- byte[] buf = new byte[INT]; // And a byte buffer for data
- int num; // And a place to count data
- while ((num = in.read(buf)) != -1) // While we read
- {
- res.getOutputStream().write(buf, 0, num); // We write
- }
- res.getOutputStream().flush(); // Flush to commit response
- } finally { // And finally
- if (in != null) {
- try { // If we opened it
- in.close(); // Close it
- } catch (IOException ignore) {
- } // Ignoring any error during closing
- }
- } // Because come on, it's just closing!
- } // For fsck's sake!
-
- /**
- * Characterize a result by using HTTP headers.
- *
- * @param result Result to characterize.
- * @param res HTTP response to set headers in.
- */
- private void characterize(QueryHandler handler, Result result, HttpServletResponse res) {
- String contentType = result.getMimeType(); // Grab the content type
- res.setContentType(contentType); // Set it
- long size = result.getSize(); // Grab the size
- if (size >= 0) {
- res.addHeader("Content-Length", String.valueOf(size)); // Don't use setContentLength(int)
- }
- if (!displayable(contentType)) // Finally, if a browser can't show it
- {
- this.suggestFilename(handler, result, res); // Then suggest a save-as filename
- }
- }
-
- /**
- * Tell if a result is displayable. This compares its MIME type to a list of MIME
- * types commonly displayble by browsers.
- *
- * @param contentType MIME type.
- * @return a <code>boolean</code> value.
- */
- protected static boolean displayable(String contentType) {
- for (String DISPLAYABLE_TYPE : DISPLAYABLE_TYPES) {
- if (DISPLAYABLE_TYPE.equals(contentType)) {
- return true; // Does it match?
- }
- }
- return false; // None of 'em do, it's not displayable
- }
-
- /**
- * We can suggest a filename (if the client happens to be a browser) using a
- * content-disposition header.
- *
- * @param res a <code>HttpServletResponse</code> value.
- */
- protected void suggestFilename(QueryHandler handler, Result result, HttpServletResponse res) {
-
- String resource = result.getResourceID();
- if (resource == null || resource.length() == 0) {
- resource = "product.dat";
- }
-
- // suggest some names based on resource mime type
- String contentType = res.getContentType();
-
- // "zip" mime types
- if (contentType!=null) {
- if (contentType.equals("application/x-compressed") ||
- contentType.equals("application/x-zip-compressed") ||
- contentType.equals("application/zip") ||
- contentType.equals("multipart/x-zip") ) {
-
- // resource = resource.replaceAll("\\..+",".zip"); // replace extension with .zip
- resource = "products_" + resource + ".zip";
- }
- }
-
- // set "Content-disposition" header
- res.addHeader("Content-disposition", "attachment; filename=\"" + resource + "\"");
-
- }
-
- /**
- * MIME types commonly displayable by browsers.
- */
- private static final String[] DISPLAYABLE_TYPES = {
- "text/plain", "text/richtext", "text/enriched", "text/tab-separated-values", "text/html", "text/xml", "text/rtf",
- "message/rfc822", "message/partial", "message/external-body", "message/news", "message/http",
- "message/delivery-status", "message/disposition-notification", "message/s-http", "application/rtf",
- "application/pdf", "image/jpeg", "image/gif", "image/tiff", "image/png", "audio/basic", "audio/32kadpcm",
- "audio/mpeg", "video/mpeg", "video/quicktime"
- };
-
- /**
- * Retriever that retrieves product data over a method call boundary to a large
- * product query handler.
- */
- private static class ProductRetriever implements Retriever {
- /**
- * Creates a new <code>ProductRetriever</code> instance.
- *
- * @param handler a <code>LargeProductQueryHandler</code> value.
- */
- public ProductRetriever(LargeProductQueryHandler handler) {
- this.handler = handler;
- }
-
- /** {@inheritDoc} */
- public byte[] retrieveChunk(String id, long offset, int len) throws ProductException {
- return handler.retrieveChunk(id, offset, len);
- }
-
- /** {@inheritDoc} */
- public void close(String id) {
- handler.close(id);
- }
-
- /** Handler to use. */
- private LargeProductQueryHandler handler;
- }
-}
-
http://git-wip-us.apache.org/repos/asf/oodt/blob/098cc4fa/grid/src/main/java/org/apache/oodt/grid/ProductServer.java
----------------------------------------------------------------------
diff --git a/grid/src/main/java/org/apache/oodt/grid/ProductServer.java b/grid/src/main/java/org/apache/oodt/grid/ProductServer.java
deleted file mode 100755
index ad16ff4..0000000
--- a/grid/src/main/java/org/apache/oodt/grid/ProductServer.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF 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 org.apache.oodt.grid;
-
-import org.apache.oodt.product.QueryHandler;
-
-/**
- * A product server.
- *
- */
-public class ProductServer extends Server {
- /**
- * Creates a new <code>ProductServer</code> instance.
- *
- * @param configuration System configuration.
- * @param className Class name of query handler.
- */
- public ProductServer(Configuration configuration, String className) {
- super (configuration, className);
- }
-
- /** {@inheritDoc} */
- protected String getType() {
- return "product";
- }
-
- public int hashCode() {
- return super.hashCode() ^ 0xaaaaaaaa;
- }
-
- public boolean equals(Object obj) {
- return super.equals(obj) && obj instanceof ProductServer;
- }
-
- public String toString() {
- return "ProductServer[" + super.toString() + "]";
- }
-
- /**
- * Create a query handler from this server.
- *
- * @return a <code>QueryHandler</code> value.
- * @throws ClassNotFoundException if the class can't be found.
- * @throws InstantiationException if the handler can't be instantiated.
- * @throws IllegalAccessException if the handler has no public constructor.
- */
- public QueryHandler createQueryHandler() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
- return (QueryHandler) createHandler();
- }
-}