Update project structure to org.onap.aaf
[aaf/authz.git] / authz-fs / src / main / java / org / onap / aaf / authz / fs / FileServer.java
diff --git a/authz-fs/src/main/java/org/onap/aaf/authz/fs/FileServer.java b/authz-fs/src/main/java/org/onap/aaf/authz/fs/FileServer.java
new file mode 100644 (file)
index 0000000..0a8547f
--- /dev/null
@@ -0,0 +1,156 @@
+/*******************************************************************************\r
+ * ============LICENSE_START====================================================\r
+ * * org.onap.aaf\r
+ * * ===========================================================================\r
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
+ * * ===========================================================================\r
+ * * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * * you may not use this file except in compliance with the License.\r
+ * * You may obtain a copy of the License at\r
+ * * \r
+ *  *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * * \r
+ *  * Unless required by applicable law or agreed to in writing, software\r
+ * * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * * See the License for the specific language governing permissions and\r
+ * * limitations under the License.\r
+ * * ============LICENSE_END====================================================\r
+ * *\r
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ * *\r
+ ******************************************************************************/\r
+package org.onap.aaf.authz.fs;\r
+\r
+import static org.onap.aaf.cssa.rserv.HttpMethods.GET;\r
+\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.net.URL;\r
+import java.util.ArrayList;\r
+import java.util.EnumSet;\r
+import java.util.List;\r
+import java.util.Properties;\r
+\r
+import org.onap.aaf.authz.env.AuthzEnv;\r
+import org.onap.aaf.authz.env.AuthzTrans;\r
+import org.onap.aaf.authz.env.AuthzTransOnlyFilter;\r
+import org.onap.aaf.cssa.rserv.CachingFileAccess;\r
+import org.onap.aaf.cssa.rserv.RServlet;\r
+\r
+import com.att.aft.dme2.api.DME2Manager;\r
+import com.att.aft.dme2.api.DME2Server;\r
+import com.att.aft.dme2.api.DME2ServerProperties;\r
+import com.att.aft.dme2.api.DME2ServiceHolder;\r
+import com.att.aft.dme2.api.util.DME2FilterHolder;\r
+import com.att.aft.dme2.api.util.DME2FilterHolder.RequestDispatcherType;\r
+import com.att.aft.dme2.api.util.DME2ServletHolder;\r
+import org.onap.aaf.inno.env.APIException;\r
+\r
+\r
+public class FileServer extends RServlet<AuthzTrans>  {\r
+       public FileServer(final AuthzEnv env) throws APIException, IOException {\r
+               try {\r
+                       ///////////////////////  \r
+                       // File Server \r
+                       ///////////////////////\r
+                       \r
+                       CachingFileAccess<AuthzTrans> cfa = new CachingFileAccess<AuthzTrans>(env);\r
+                       route(env,GET,"/:key", cfa); \r
+                       route(env,GET,"/:key/:cmd", cfa); \r
+                       ///////////////////////\r
+       \r
+       \r
+               } catch (Exception e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+       \r
+       public static void main(String[] args) {\r
+               try {\r
+                       // Load Properties from authFramework.properties.  Needed for DME2 and AuthzEnv\r
+                       Properties props = new Properties();\r
+                       URL rsrc = ClassLoader.getSystemResource("FileServer.props");\r
+                       if(rsrc==null) {\r
+                               System.err.println("Folder containing FileServer.props must be on Classpath");\r
+                               System.exit(1);\r
+                       }\r
+                       InputStream is = rsrc.openStream();\r
+                       try {\r
+                               props.load(is);\r
+                       } finally {\r
+                               is.close();\r
+                       }\r
+                       \r
+                       // Load Properties into AuthzEnv\r
+                       AuthzEnv env = new AuthzEnv(props); \r
+                       env.setLog4JNames("log4j.properties","authz","fs","audit","init",null);\r
+                       \r
+                       // AFT Discovery Libraries only read System Props\r
+                       env.loadToSystemPropsStartsWith("AFT_","DME2_");\r
+                       env.init().log("DME2 using " + env.getProperty("DMEServiceName","unknown") + " URI");\r
+                       \r
+                       // Start DME2 (DME2 needs Properties form of props)\r
+                   DME2Manager dme2 = new DME2Manager("RServDME2Manager",props);\r
+                   \r
+                   DME2ServiceHolder svcHolder;\r
+                   List<DME2ServletHolder> slist = new ArrayList<DME2ServletHolder>();\r
+                   svcHolder = new DME2ServiceHolder();\r
+                   String serviceName = env.getProperty("DMEServiceName",null);\r
+                       if(serviceName!=null) {\r
+                       svcHolder.setServiceURI(serviceName);\r
+                       svcHolder.setManager(dme2);\r
+                       svcHolder.setContext("/");\r
+                       \r
+                       FileServer fs = new FileServer(env);\r
+                       DME2ServletHolder srvHolder = new DME2ServletHolder(fs);\r
+                       srvHolder.setContextPath("/*");\r
+                       slist.add(srvHolder);\r
+                       \r
+                       EnumSet<RequestDispatcherType> edlist = EnumSet.of(\r
+                                       RequestDispatcherType.REQUEST,\r
+                                       RequestDispatcherType.FORWARD,\r
+                                       RequestDispatcherType.ASYNC\r
+                                       );\r
+\r
+                       ///////////////////////\r
+                       // Apply Filters\r
+                       ///////////////////////\r
+                       List<DME2FilterHolder> flist = new ArrayList<DME2FilterHolder>();\r
+                       \r
+                       // Need TransFilter\r
+                       flist.add(new DME2FilterHolder(new AuthzTransOnlyFilter(env),"/*",edlist));\r
+                       svcHolder.setFilters(flist);\r
+                       svcHolder.setServletHolders(slist);\r
+                       \r
+                       DME2Server dme2svr = dme2.getServer();\r
+                       DME2ServerProperties dsprops = dme2svr.getServerProperties();\r
+                       dsprops.setGracefulShutdownTimeMs(1000);\r
+\r
+                       env.init().log("Starting AAF FileServer with Jetty/DME2 server...");\r
+                       dme2svr.start();\r
+                       try {\r
+//                             if(env.getProperty("NO_REGISTER",null)!=null)\r
+                               dme2.bindService(svcHolder);\r
+                               env.init().log("DME2 is available as HTTP"+(dsprops.isSslEnable()?"/S":""),"on port:",dsprops.getPort());\r
+\r
+                           while(true) { // Per DME2 Examples...\r
+                               Thread.sleep(5000);\r
+                           }\r
+                       } catch(InterruptedException e) {\r
+                           env.init().log("AAF Jetty Server interrupted!");\r
+                       } catch(Exception e) { // Error binding service doesn't seem to stop DME2 or Process\r
+                           env.init().log(e,"DME2 Initialization Error");\r
+                               dme2svr.stop();\r
+                               System.exit(1);\r
+                       }\r
+                       } else {\r
+                               env.init().log("Properties must contain DMEServiceName");\r
+                       }\r
+\r
+               } catch (Exception e) {\r
+                       e.printStackTrace(System.err);\r
+                       System.exit(1);\r
+               }\r
+       }\r
+}\r