diff options
Diffstat (limited to 'aai-resources/src/main/java')
12 files changed, 87 insertions, 1930 deletions
diff --git a/aai-resources/src/main/java/org/openecomp/aai/dbgen/AddResourceVersionProp.java b/aai-resources/src/main/java/org/openecomp/aai/dbgen/AddResourceVersionProp.java deleted file mode 100644 index 15c9b1e..0000000 --- a/aai-resources/src/main/java/org/openecomp/aai/dbgen/AddResourceVersionProp.java +++ /dev/null @@ -1,126 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.aai.dbgen; - - -import java.util.Iterator; -import java.util.Properties; - -import org.openecomp.aai.dbmap.AAIGraph; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.logging.ErrorLogHelper; -import org.openecomp.aai.util.AAIConfig; -import org.openecomp.aai.util.AAIConstants; -import com.att.eelf.configuration.Configuration; -import com.thinkaurelius.titan.core.TitanGraph; -import com.thinkaurelius.titan.core.TitanVertex; -import org.apache.tinkerpop.gremlin.structure.Vertex; - - -public class AddResourceVersionProp { - - - /** - * The main method. - * - * @param args the arguments - */ - public static void main(String[] args) { - - // Set the logging file properties to be used by EELFManager - Properties props = System.getProperties(); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_NAME, AAIConstants.AAI_SCHEMA_MOD_LOGBACK_PROPS); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_PATH, AAIConstants.AAI_HOME_ETC_APP_PROPERTIES); - - // NOTE -- This is a one-time migration for adding the new property "resource-version" to ALL of our nodes. - // Also -- since it's a one-time thing, we just re-use AAI_SCHEMA_MOD_LOG4J_PROPS - - TitanGraph graph = null; - - System.out.println(">>> WARNING: this script affects all nodes in the database. <<<< " ); - System.out.println(">>> Processing will begin in 5 seconds (unless interrupted). <<<"); - try { - // Give them a chance to back out of this - Thread.sleep(5000); - } catch ( java.lang.InterruptedException ie) { - System.out.println( " AddResourceVersionProp script has been aborted. "); - System.exit(1); - } - - try { - AAIConfig.init(); - ErrorLogHelper.loadProperties(); - - System.out.println(" ---- NOTE --- about to open graph (takes a little while)\n"); - - graph = AAIGraph.getInstance().getGraph(); - if( graph == null ){ - String emsg = "Not able to get a graph object in AddResourceVersionProp.java\n"; - System.out.println( emsg ); - System.exit(1); - } - - - // For each node in the db -- update the "resource-version" and the last mod timestamp. - Iterable<TitanVertex> verts = null; - verts= graph.query().vertices(); - Iterator<TitanVertex> it = verts.iterator(); - int vtxCount = 0; - long unixTimeNow = System.currentTimeMillis() / 1000L; - String timeNowInSec = "" + unixTimeNow; - - while( it.hasNext() ){ - vtxCount++; - TitanVertex tmpVtx = (TitanVertex)it.next(); - tmpVtx.property( "aai-last-mod-ts", timeNowInSec ); - tmpVtx.property( "resource-version", timeNowInSec ); - } - - System.out.println("Updated data for " + vtxCount + " vertexes. Now call graph.tx().commit(). "); - graph.tx().commit(); - - } - catch (AAIException e) { - System.out.print("Threw a AAIException: \n"); - System.out.println(e.getErrorObject().toString()); - } - catch (Exception ex) { - System.out.print("Threw a regular Exception:\n"); - System.out.println(ex.getMessage()); - } - finally { - if( graph != null ){ - // Any changes that worked correctly should have already done their commits. - graph.tx().rollback(); - graph.close(); - } - - } - - - System.exit(0); - - }// End of main() - - -} - - diff --git a/aai-resources/src/main/java/org/openecomp/aai/dbgen/ChangePropertyCardinality.java b/aai-resources/src/main/java/org/openecomp/aai/dbgen/ChangePropertyCardinality.java deleted file mode 100644 index f92cfbc..0000000 --- a/aai-resources/src/main/java/org/openecomp/aai/dbgen/ChangePropertyCardinality.java +++ /dev/null @@ -1,307 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.aai.dbgen; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Iterator; -import java.util.Properties; -import java.util.TimeZone; - -import org.openecomp.aai.dbmap.AAIGraph; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.ingestModel.DbMaps; -import org.openecomp.aai.ingestModel.IngestModelMoxyOxm; -import org.openecomp.aai.logging.ErrorLogHelper; -import org.openecomp.aai.util.AAIConfig; -import org.openecomp.aai.util.AAIConstants; -import com.att.eelf.configuration.Configuration; -import com.thinkaurelius.titan.core.Cardinality; -import com.thinkaurelius.titan.core.PropertyKey; -import com.thinkaurelius.titan.core.TitanGraph; -import com.thinkaurelius.titan.core.TitanVertex; -import com.thinkaurelius.titan.core.schema.TitanManagement; -import org.apache.tinkerpop.gremlin.structure.Vertex; - - -public class ChangePropertyCardinality { - - - /** - * The main method. - * - * @param args the arguments - */ - public static void main(String[] args) { - - //public static void ChangePropertyCardinality( String[] args ) { - - // Set the logging file properties to be used by EELFManager - Properties props = System.getProperties(); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_NAME, AAIConstants.AAI_SCHEMA_MOD_LOGBACK_PROPS); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_PATH, AAIConstants.AAI_HOME_ETC_APP_PROPERTIES); - - // NOTE -- We're just working with properties that are used for NODES - String propName = ""; - String targetDataType = "String"; - String targetCardinality = "SET"; - String preserveDataFlag = "false"; - boolean preserveData = false; - - - String usageString = "Usage: ChangePropertyCardinality propertyName targetDataType targetCardinality preserveDataFlag \n"; - if( args.length != 4 ){ - String emsg = "Four Parameters are required. \n" + usageString; - System.out.println( emsg ); - System.exit(1); - } - else { - propName = args[0]; - targetDataType = args[1]; - targetCardinality = args[2]; - preserveDataFlag = args[3]; - } - - if( propName.equals("") ){ - String emsg = "Bad parameter - propertyName cannot be empty. \n" + usageString; - System.out.println( emsg ); - System.exit(1); - } - else if( !targetDataType.equals("String") ){ - // && !targetDataType.equals("Integer") - // && !targetDataType.equals("Long") - // && !targetDataType.equals("Boolean") ){ - // String emsg = "Unsupported targetDataType. We only support String, Integer, Long or Boolean for now.\n" + usageString; - String emsg = "Unsupported targetDataType. We only support String for now.\n" + usageString; - System.out.println( emsg ); - System.exit(1); - } - else if( !targetCardinality.equals("SET") ){ - // && !targetCardinality.equals("LIST") - // && !targetCardinality.equals("SINGLE") ){ - String emsg = "Unsupported targetCardinality. We only support SET for now.\n" + usageString; - System.out.println( emsg ); - System.exit(1); - } - else { - if( preserveDataFlag.equals("true") ){ - preserveData = true; - String emsg = "Unsupported preserveDataFlag. For now, we only support: 'false'.\n" + usageString; - System.out.println( emsg ); - System.exit(1); - } - else if (preserveDataFlag.equals("false") ){ - preserveData = false; - } - else { - String emsg = "Unsupported preserveDataFlag. We only support: 'true' or 'false'.\n" + usageString; - System.out.println( emsg ); - System.exit(1); - } - } - - String targetDataTypeStr = ""; - if( targetCardinality.equals("SINGLE") ){ - targetDataTypeStr = targetDataType; - } - else if( targetCardinality.equals("SET") ){ - targetDataTypeStr = "Set<" + targetDataType + ">"; - } - else if( targetCardinality.equals("LIST") ){ - targetDataTypeStr = "List<" + targetDataType + ">"; - } - - Class dType = null; - if(targetDataType.equals("String")){ dType = String.class; } - else if(targetDataType.equals("Integer")){ dType = Integer.class; } - else if(targetDataType.equals("Boolean")){ dType = Boolean.class; } - else if(targetDataType.equals("Character")){ dType = Character.class; } - else if(targetDataType.equals("Long")){ dType = Long.class; } - else if(targetDataType.equals("Float")){ dType = Float.class; } - else if(targetDataType.equals("Double")){ dType = Double.class; } - - System.out.println("\n>> WARNING/NOTE - If the passed cardinality is not in synch with what is in the ex5.json file, "); - System.out.println("\n>> then this will cause problems when new environments are created."); - - // Give a big warning if the DbMaps.PropertyDataTypeMap value does not agree with what we're doing - DbMaps dbMaps = null; - try { - dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP)); - } - catch( AAIException ae ){ - String emsg = "Could not instantiate a copy of dbMaps. "; - System.out.println( emsg ); - System.exit(1); - } - - String warningMsg = ""; - if( !dbMaps.PropertyDataTypeMap.containsKey(propName) ){ - String emsg = "Property Name = [" + propName + "] not found in PropertyDataTypeMap. "; - System.out.println( emsg ); - System.exit(1); - } - else { - String currentDataType = dbMaps.PropertyDataTypeMap.get(propName); - if( !currentDataType.equals(targetDataTypeStr) ){ - warningMsg = "TargetDataType [" + targetDataTypeStr + "] does not match what is in DbMaps (" + currentDataType + ")."; - } - } - - if( !warningMsg.equals("") ){ - System.out.println("\n>>> WARNING <<<< " ); - System.out.println(">>> " + warningMsg + " <<<"); - System.out.println(">>> !!! WARNING -- this change may be overwritten in some environments if <<<"); - System.out.println(">>> !!! entries are out of synch with what is done with this script. <<<"); - System.out.println(">>> WARNING <<<< " ); - } - - System.out.println(">>> Processing will begin in 5 seconds (unless interrupted). <<<"); - try { - // Give them a chance to back out of this - Thread.sleep(5000); - } catch ( java.lang.InterruptedException ie) { - System.out.println( " DB Schema Update has been aborted. "); - System.exit(1); - } - - TitanManagement graphMgt = null; - TitanGraph graph = null; - try { - AAIConfig.init(); - ErrorLogHelper.loadProperties(); - - System.out.println(" ---- NOTE --- about to open graph (takes a little while)\n"); - - graph = AAIGraph.getInstance().getGraph(); - if( graph == null ){ - String emsg = "Not able to get a graph object in ChangePropertyCardinality.java\n"; - System.out.println( emsg ); - System.exit(1); - } - - // Make sure this property is in the DB. - graphMgt = graph.openManagement(); - if( graphMgt == null ){ - String emsg = "Not able to get a graph Management object in ChangePropertyCardinality.java\n"; - System.out.println( emsg ); - System.exit(1); - } - - PropertyKey origPropKey = graphMgt.getPropertyKey(propName); - if( origPropKey == null ){ - // The old one wasn't there, so there's nothing to do - String emsg = "The propName = [" + propName + "] is not defined in our graph. "; - System.out.println( emsg ); - System.exit(1); - } - - if( origPropKey.cardinality().equals(Cardinality.valueOf(targetCardinality)) ){ - // The existing one already has cardinality of what they're asking for. - String emsg = "The propName = [" + propName + "] already has Cardinality of [" + targetCardinality + "]. "; - System.out.println( emsg ); - System.exit(0); - } - - // Rename this property to a backup name (old name with "retired_" appended plus a dateStr) - SimpleDateFormat d = new SimpleDateFormat("MMddHHmm"); - d.setTimeZone(TimeZone.getTimeZone("GMT")); - String dteStr = d.format(new Date()).toString(); - String retiredName = propName + "-" + dteStr + "-RETIRED"; - graphMgt.changeName( origPropKey, retiredName ); - - // Create a new property using the original property name and the targetDataType - PropertyKey freshPropKey = graphMgt.makePropertyKey(propName).dataType(dType).cardinality(Cardinality.valueOf(targetCardinality)).make(); - - System.out.println("Committing schema changes with graphMgt.tx().commit()"); - graphMgt.commit(); - graph.tx().commit(); - graph.close(); - - - // Get A new graph object - System.out.println(" ---- NOTE --- about to open a second graph object (takes a little while)\n"); - - graph = AAIGraph.getInstance().getGraph(); - if( graph == null ){ - String emsg = "Not able to get a graph object in SchemaMod.java\n"; - System.out.println( emsg ); - System.exit(1); - } - - // For each node that has this property, update the new from the old and then remove the - // old property from that node - // ---- NOTE ---- We're not preserving data at this point - Iterable<TitanVertex> verts = null; - verts= graph.query().has(retiredName).vertices(); - Iterator<TitanVertex> it = verts.iterator(); - int vtxCount = 0; - while( it.hasNext() ){ - vtxCount++; - TitanVertex tmpVtx = (TitanVertex)it.next(); - String tmpVid = tmpVtx.id().toString(); - - Object origVal = tmpVtx.property(retiredName).orElse(null); - if( preserveData ){ - tmpVtx.property(propName,origVal); - System.out.println("INFO -- just did the add of the freshPropertyKey and updated it with the orig value (" + - origVal.toString() + ")"); - } - else { - // existing nodes just won't have this property anymore - // - } - tmpVtx.property(retiredName).remove(); - System.out.println("INFO -- just did the remove of the " + retiredName + " from this vertex. (vid=" + tmpVid + ")"); - } - - System.out.println("Updated data for " + vtxCount + " vertexes. Now call graph.tx().commit(). "); - graph.tx().commit(); - - } - catch (AAIException e) { - System.out.print("Threw a AAIException: \n"); - System.out.println(e.getErrorObject().toString()); - } - catch (Exception ex) { - System.out.print("Threw a regular Exception:\n"); - System.out.println(ex.getMessage()); - } - finally { - if( graphMgt != null && graphMgt.isOpen() ){ - // Any changes that worked correctly should have already done their commits. - graphMgt.rollback(); - } - if( graph != null ){ - // Any changes that worked correctly should have already done their commits. - graph.tx().rollback(); - graph.close(); - } - - } - - System.exit(0); - - }// End of main() - - -} - - diff --git a/aai-resources/src/main/java/org/openecomp/aai/dbgen/DataSnapshot.java b/aai-resources/src/main/java/org/openecomp/aai/dbgen/DataSnapshot.java index d03a5e3..2f1ef33 100644 --- a/aai-resources/src/main/java/org/openecomp/aai/dbgen/DataSnapshot.java +++ b/aai-resources/src/main/java/org/openecomp/aai/dbgen/DataSnapshot.java @@ -25,20 +25,18 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Iterator; import java.util.Properties; -import java.util.TimeZone; import org.apache.tinkerpop.gremlin.structure.io.IoCore; import org.apache.tinkerpop.gremlin.structure.io.graphson.LegacyGraphSONReader; - import org.openecomp.aai.dbmap.AAIGraph; import org.openecomp.aai.exceptions.AAIException; import org.openecomp.aai.logging.ErrorLogHelper; import org.openecomp.aai.util.AAIConfig; import org.openecomp.aai.util.AAIConstants; +import org.openecomp.aai.util.FormatDate; + import com.att.eelf.configuration.Configuration; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -100,9 +98,8 @@ public class DataSnapshot { // ------------------------------------------ // They just want to take a snapshot. // ------------------------------------------ - SimpleDateFormat d = new SimpleDateFormat("yyyyMMddHHmm"); - d.setTimeZone(TimeZone.getTimeZone("GMT")); - String dteStr = d.format(new Date()).toString(); + FormatDate fd = new FormatDate("yyyyMMddHHmm", "GMT"); + String dteStr = fd.getDateTime(); String newSnapshotOutFname = targetDir + AAIConstants.AAI_FILESEP + "dataSnapshot.graphSON." + dteStr; graph.io(IoCore.graphson()).writeGraph(newSnapshotOutFname); diff --git a/aai-resources/src/main/java/org/openecomp/aai/dbgen/SchemaMod.java b/aai-resources/src/main/java/org/openecomp/aai/dbgen/SchemaMod.java deleted file mode 100644 index 9cc6cf3..0000000 --- a/aai-resources/src/main/java/org/openecomp/aai/dbgen/SchemaMod.java +++ /dev/null @@ -1,441 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.aai.dbgen; - -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.Properties; -import java.util.TimeZone; -import java.util.UUID; - -import org.apache.tinkerpop.gremlin.structure.Direction; -import org.apache.tinkerpop.gremlin.structure.Edge; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.VertexProperty; -import org.slf4j.MDC; - -import org.openecomp.aai.dbmap.AAIGraph; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.ingestModel.DbMaps; -import org.openecomp.aai.ingestModel.IngestModelMoxyOxm; -import org.openecomp.aai.logging.ErrorLogHelper; -import org.openecomp.aai.util.AAIConfig; -import org.openecomp.aai.util.AAIConstants; -import org.openecomp.aai.util.UniquePropertyCheck; -import com.att.eelf.configuration.Configuration; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.thinkaurelius.titan.core.Cardinality; -import com.thinkaurelius.titan.core.PropertyKey; -import com.thinkaurelius.titan.core.TitanEdge; -import com.thinkaurelius.titan.core.TitanGraph; -import com.thinkaurelius.titan.core.TitanVertex; -import com.thinkaurelius.titan.core.schema.TitanManagement; - -public class SchemaMod { - - private static final String FROMAPPID = "AAI-UTILS"; - private static final String TRANSID = UUID.randomUUID().toString(); - private static final String COMPONENT = "SchemaMod"; - - /** - * The main method. - * - * @param args the arguments - */ - public static void main(String[] args) { - - SchemaMod.execute(args); - System.exit(0); - - }// End of main() - - /** - * Execute. - * - * @param args the args - */ - public static void execute(String[] args) { - - // Set the logging file properties to be used by EELFManager - Properties props = System.getProperties(); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_NAME, AAIConstants.AAI_SCHEMA_MOD_LOGBACK_PROPS); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_PATH, AAIConstants.AAI_HOME_ETC_APP_PROPERTIES); - - EELFLogger logger = EELFManager.getInstance().getLogger(UniquePropertyCheck.class.getSimpleName()); - MDC.put("logFilenameAppender", SchemaMod.class.getSimpleName()); - - // NOTE -- We're just working with properties that are used for NODES - // for now. - - TitanGraph graph = null; - TitanManagement graphMgt = null; - - Boolean preserveData = true; - String propName = ""; - String targetDataType = ""; - String targetIndexInfo = ""; - String preserveDataFlag = ""; - - String usageString = "Usage: SchemaMod propertyName targetDataType targetIndexInfo preserveDataFlag \n"; - if (args.length != 4) { - String emsg = "Four Parameters are required. \n" + usageString; - logAndPrint(logger, emsg); - System.exit(1); - } else { - propName = args[0]; - targetDataType = args[1]; - targetIndexInfo = args[2]; - preserveDataFlag = args[3]; - } - - if (propName.equals("")) { - String emsg = "Bad parameter - propertyName cannot be empty. \n" + usageString; - logAndPrint(logger, emsg); - System.exit(1); - } else if (!targetDataType.equals("String") && !targetDataType.equals("Set<String>") - && !targetDataType.equals("Integer") && !targetDataType.equals("Long") - && !targetDataType.equals("Boolean")) { - String emsg = "Unsupported targetDataType. We only support String, Set<String>, Integer, Long or Boolean for now.\n" - + usageString; - logAndPrint(logger, emsg); - System.exit(1); - } else if (!targetIndexInfo.equals("uniqueIndex") && !targetIndexInfo.equals("index") - && !targetIndexInfo.equals("noIndex")) { - String emsg = "Unsupported IndexInfo. We only support: 'uniqueIndex', 'index' or 'noIndex'.\n" - + usageString; - logAndPrint(logger, emsg); - System.exit(1); - } else { - if (preserveDataFlag.equals("true")) { - preserveData = true; - } else if (preserveDataFlag.equals("false")) { - preserveData = false; - } else { - String emsg = "Unsupported preserveDataFlag. We only support: 'true' or 'false'.\n" + usageString; - logAndPrint(logger, emsg); - System.exit(1); - } - } - - try { - AAIConfig.init(); - ErrorLogHelper.loadProperties(); - } catch (Exception ae) { - String emsg = "Problem with either AAIConfig.init() or ErrorLogHelper.LoadProperties(). "; - logAndPrint(logger, emsg + "[" + ae.getMessage() + "]"); - System.exit(1); - } - - DbMaps dbMaps = null; - try { - ArrayList<String> apiVersions = new ArrayList<String>(); - apiVersions.add(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP)); - final IngestModelMoxyOxm m = new IngestModelMoxyOxm(); - m.init(apiVersions, false); - dbMaps = m.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP)); - } catch (AAIException ae) { - String emsg = "Could not instantiate a copy of DbMaps. "; - logAndPrint(logger, emsg + "[" + ae.getMessage() + "]"); - System.exit(1); - } catch (Exception e) { - String emsg = "exception, Could not instantiate a copy of DbMaps. "; - logAndPrint(logger, emsg + "[" + e.getMessage() + "]"); - System.exit(1); - } - // Give a big warning if the DbMaps.PropertyDataTypeMap value does not - // agree with what we're doing - String warningMsg = ""; - /*if (!dbMaps.PropertyDataTypeMap.containsKey(propName)) { - String emsg = "Property Name = [" + propName + "] not found in PropertyDataTypeMap. "; - logAndPrint(logger, emsg); - System.exit(1); - } else { - String currentDataType = dbMaps.PropertyDataTypeMap.get(propName); - if (!currentDataType.equals(targetDataType)) { - warningMsg = "TargetDataType [" + targetDataType + "] does not match what is in DbRules.java (" - + currentDataType + ")."; - } - }*/ - - if (!warningMsg.equals("")) { - logAndPrint(logger, "\n>>> WARNING <<<< "); - logAndPrint(logger, ">>> " + warningMsg + " <<<"); - } - - logAndPrint(logger, ">>> Processing will begin in 5 seconds (unless interrupted). <<<"); - try { - // Give them a chance to back out of this - Thread.sleep(5000); - } catch (java.lang.InterruptedException ie) { - logAndPrint(logger, " DB Schema Update has been aborted. "); - System.exit(1); - } - - try { - Class dType = null; - if (targetDataType.equals("String")) { - dType = String.class; - } else if (targetDataType.equals("Set<String>")) { - dType = String.class; - } else if (targetDataType.equals("Integer")) { - dType = Integer.class; - } else if (targetDataType.equals("Boolean")) { - dType = Boolean.class; - } else if (targetDataType.equals("Character")) { - dType = Character.class; - } else if (targetDataType.equals("Long")) { - dType = Long.class; - } else if (targetDataType.equals("Float")) { - dType = Float.class; - } else if (targetDataType.equals("Double")) { - dType = Double.class; - } else { - String emsg = "Not able translate the targetDataType [" + targetDataType + "] to a Class variable.\n"; - logAndPrint(logger, emsg); - System.exit(1); - } - String cardinality = "SINGLE"; // Default cardinality to SINGLE - - if (targetDataType.equals("Set<String>")) { - cardinality = "SET"; - } - logAndPrint(logger, " ---- NOTE --- about to open graph (takes a little while)\n"); - - graph = AAIGraph.getInstance().getGraph(); - if (graph == null) { - String emsg = "Not able to get a graph object in SchemaMod.java\n"; - logAndPrint(logger, emsg); - System.exit(1); - } - - // Make sure this property is in the DB. - graphMgt = graph.openManagement(); - if (graphMgt == null) { - String emsg = "Not able to get a graph Management object in SchemaMod.java\n"; - logAndPrint(logger, emsg); - System.exit(1); - } - PropertyKey origPropKey = graphMgt.getPropertyKey(propName); - if (origPropKey == null) { - String emsg = "The propName = [" + propName + "] is not defined in our graph. "; - logAndPrint(logger, emsg); - System.exit(1); - } - - if (targetIndexInfo.equals("uniqueIndex")) { - // Make sure the data in the property being changed can have a - // unique-index put on it. - // Ie. if there are duplicate values, we will not be able to - // migrate the data back into the property. - Boolean foundDupesFlag = UniquePropertyCheck.runTheCheckForUniqueness(TRANSID, FROMAPPID, - graph.newTransaction(), propName, logger); - if (foundDupesFlag) { - logAndPrint(logger, - "\n\n!!!!!! >> Cannot add a uniqueIndex for the property: [" + propName - + "] because duplicate values were found. See the log for details on which" - + " nodes have this value. \nThey will need to be resolved (by updating those values to new" - + " values or deleting unneeded nodes) using the standard REST-API \n"); - System.exit(1); - } - } - - // -------------- If we made it to here - we must be OK with making - // this change ------------ - - // Rename this property to a backup name (old name with "retired_" - // appended plus a dateStr) - - SimpleDateFormat d = new SimpleDateFormat("MMddHHmm"); - d.setTimeZone(TimeZone.getTimeZone("GMT")); - String dteStr = d.format(new Date()).toString(); - String retiredName = propName + "-" + dteStr + "-RETIRED"; - graphMgt.changeName(origPropKey, retiredName); - - // Create a new property using the original property name and the - // targetDataType - PropertyKey freshPropKey = graphMgt.makePropertyKey(propName).dataType(dType) - .cardinality(Cardinality.valueOf(cardinality)).make(); - - // Create the appropriate index (if any) - if (targetIndexInfo.equals("uniqueIndex")) { - String freshIndexName = propName + dteStr; - graphMgt.buildIndex(freshIndexName, Vertex.class).addKey(freshPropKey).unique().buildCompositeIndex(); - } else if (targetIndexInfo.equals("index")) { - String freshIndexName = propName + dteStr; - graphMgt.buildIndex(freshIndexName, Vertex.class).addKey(freshPropKey).buildCompositeIndex(); - } - - logAndPrint(logger, "Committing schema changes with graphMgt.commit()"); - graphMgt.commit(); - graph.tx().commit(); - - // Get A new graph object - logAndPrint(logger, " ---- NOTE --- about to open a second graph object (takes a little while)\n"); - - // For each node that has this property, update the new from the old - // and then remove the - // old property from that node - Iterable<?> verts = null; - verts = graph.query().has(retiredName).vertices(); - Iterator<?> it = verts.iterator(); - int vtxCount = 0; - ArrayList<String> alreadySeenVals = new ArrayList<String>(); - while (it.hasNext()) { - vtxCount++; - TitanVertex tmpVtx = (TitanVertex) it.next(); - String tmpVid = tmpVtx.id().toString(); - - Object origVal = tmpVtx.<Object> property(retiredName).orElse(null); - if (preserveData) { - tmpVtx.property(propName, origVal); - if (targetIndexInfo.equals("uniqueIndex")) { - // We're working on a property that is being used as a - // unique index - String origValStr = ""; - if (origVal != null) { - origValStr = origVal.toString(); - } - if (alreadySeenVals.contains(origValStr)) { - // This property is supposed to be unique, but we've - // already seen this value in this loop - // This should have been caught up in the first part - // of SchemaMod, but since it wasn't, we - // will just log the problem. - logAndPrint(logger, - "\n\n ---------- ERROR - could not migrate the old data [" + origValStr - + "] for propertyName [" + propName - + "] because this property is having a unique index put on it."); - showPropertiesAndEdges(TRANSID, FROMAPPID, tmpVtx, logger); - logAndPrint(logger, "-----------------------------------\n"); - } else { - // Ok to add this prop in as a unique value - tmpVtx.property(propName, origVal); - logAndPrint(logger, - "INFO -- just did the add of the freshPropertyKey and updated it with the orig value (" - + origValStr + ")"); - } - alreadySeenVals.add(origValStr); - } else { - // We are not working with a unique index - tmpVtx.property(propName, origVal); - logAndPrint(logger, - "INFO -- just did the add of the freshPropertyKey and updated it with the orig value (" - + origVal.toString() + ")"); - } - } else { - // existing nodes just won't have that property anymore - // Not sure if we'd ever actually want to do this -- maybe - // we'd do this if the new - // data type was not compatible with the old? - } - tmpVtx.property(retiredName).remove(); - - logAndPrint(logger, "INFO -- just did the remove of the " + retiredName + " from this vertex. (vid=" - + tmpVid + ")"); - } - - logAndPrint(logger, "Updated data for " + vtxCount + " vertexes. Now call graph2.commit(). "); - graph.tx().commit(); - } catch (Exception ex) { - logAndPrint(logger, "Threw a regular Exception: "); - logAndPrint(logger, ex.getMessage()); - } finally { - if (graphMgt != null && graphMgt.isOpen()) { - // Any changes that worked correctly should have already done - // their commits. - graphMgt.rollback(); - } - if (graph != null) { - // Any changes that worked correctly should have already done - // their commits. - graph.tx().rollback(); - graph.close(); - } - } - - } - - /** - * Show properties and edges. - * - * @param transId the trans id - * @param fromAppId the from app id - * @param tVert the t vert - * @param logger the logger - */ - private static void showPropertiesAndEdges(String transId, String fromAppId, TitanVertex tVert, EELFLogger logger) { - - if (tVert == null) { - logAndPrint(logger, "Null node passed to showPropertiesAndEdges."); - } else { - String nodeType = ""; - Object ob = tVert.<String> property("aai-node-type"); - if (ob == null) { - nodeType = "null"; - } else { - nodeType = ob.toString(); - } - - logAndPrint(logger, " AAINodeType/VtxID for this Node = [" + nodeType + "/" + tVert.id() + "]"); - logAndPrint(logger, " Property Detail: "); - Iterator<VertexProperty<Object>> pI = tVert.properties(); - while (pI.hasNext()) { - VertexProperty<Object> tp = pI.next(); - Object val = tp.value(); - logAndPrint(logger, "Prop: [" + tp.key() + "], val = [" + val + "] "); - } - - Iterator<Edge> eI = tVert.edges(Direction.BOTH); - if (!eI.hasNext()) { - logAndPrint(logger, "No edges were found for this vertex. "); - } - while (eI.hasNext()) { - TitanEdge ed = (TitanEdge) eI.next(); - String lab = ed.label(); - TitanVertex vtx = (TitanVertex) ed.otherVertex(tVert); - if (vtx == null) { - logAndPrint(logger, - " >>> COULD NOT FIND VERTEX on the other side of this edge edgeId = " + ed.id() + " <<< "); - } else { - String nType = vtx.<String> property("aai-node-type").orElse(null); - String vid = vtx.id().toString(); - logAndPrint(logger, "Found an edge (" + lab + ") from this vertex to a [" + nType - + "] node with VtxId = " + vid); - } - } - } - } // End of showPropertiesAndEdges() - - /** - * Log and print. - * - * @param logger the logger - * @param msg the msg - */ - protected static void logAndPrint(EELFLogger logger, String msg) { - System.out.println(msg); - logger.info(msg); - } - -} diff --git a/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptor.java b/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptor.java index 80127d0..7480c05 100644 --- a/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptor.java +++ b/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSInInterceptor.java @@ -21,11 +21,8 @@ package org.openecomp.aai.interceptors; import java.io.InputStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.List; import java.util.Map; import java.util.UUID; @@ -39,13 +36,14 @@ import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.interceptor.LoggingMessage; import org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor; import org.apache.cxf.message.Message; - import org.openecomp.aai.exceptions.AAIException; import org.openecomp.aai.logging.ErrorLogHelper; import org.openecomp.aai.rest.util.EchoResponse; import org.openecomp.aai.util.AAIConfig; import org.openecomp.aai.util.AAIConstants; +import org.openecomp.aai.util.FormatDate; import org.openecomp.aai.util.HbaseSaltPrefixer; + import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -265,19 +263,8 @@ public class AAILogJAXRSInInterceptor extends JAXRSInInterceptor { * @return the string */ protected String genDate() { - Date date = new Date(); - DateFormat formatter = null; - try { - formatter = new SimpleDateFormat(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT)); - } catch (AAIException ex) { - ErrorLogHelper.logException(ex); - } finally { - if (formatter == null) { - formatter = new SimpleDateFormat("YYMMdd-HH:mm:ss:SSS"); - } - } - - return formatter.format(date); + FormatDate fd = new FormatDate(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT, "YYMMdd-HH:mm:ss:SSS")); + return fd.getDateTime(); } } diff --git a/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptor.java b/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptor.java index 0f5e457..563500e 100644 --- a/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptor.java +++ b/aai-resources/src/main/java/org/openecomp/aai/interceptors/AAILogJAXRSOutInterceptor.java @@ -21,10 +21,7 @@ package org.openecomp.aai.interceptors; import java.io.OutputStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Collections; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,11 +33,12 @@ import org.apache.cxf.io.CachedOutputStream; import org.apache.cxf.io.CachedOutputStreamCallback; import org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor; import org.apache.cxf.message.Message; - import org.openecomp.aai.exceptions.AAIException; import org.openecomp.aai.logging.ErrorLogHelper; import org.openecomp.aai.util.AAIConfig; import org.openecomp.aai.util.AAIConstants; +import org.openecomp.aai.util.FormatDate; + import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -269,34 +267,15 @@ public class AAILogJAXRSOutInterceptor extends JAXRSOutInterceptor { } protected String genDate() { - Date date = new Date(); - DateFormat formatter = null; - try { - formatter = new SimpleDateFormat(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT)); - } catch (AAIException ex) { - ErrorLogHelper.logException(ex); - } finally { - if (formatter == null) { - formatter = new SimpleDateFormat("YYMMdd-HH:mm:ss:SSS"); - } - } - return formatter.format(date); + FormatDate fd = new FormatDate(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT, "YYMMdd-HH:mm:ss:SSS")); + return fd.getDateTime(); } public String putTransaction(String tid, String status, String rqstTm, String respTm, String srcId, String rsrcId, String rsrcType, String rqstBuf, String respBuf, String actualResponse) { String tm = null; - String fromAppId = srcId.substring(0, srcId.indexOf(':')); - String transId = srcId.substring(srcId.indexOf(':') + 1); if (tid == null || "".equals(tid)) { - Date date = new Date(); - DateFormat formatter = null; - try { - formatter = new SimpleDateFormat(AAIConfig.get(AAIConstants.HBASE_TABLE_TIMESTAMP_FORMAT)); - } catch (Exception e) { - formatter = new SimpleDateFormat("YYYYMMdd-HH:mm:ss:SSS"); - } - tm = formatter.format(date); + tm = this.genDate(); tid = tm + "-"; } diff --git a/aai-resources/src/main/java/org/openecomp/aai/rest/LegacyMoxyConsumer.java b/aai-resources/src/main/java/org/openecomp/aai/rest/LegacyMoxyConsumer.java index ca5fc33..27a082e 100644 --- a/aai-resources/src/main/java/org/openecomp/aai/rest/LegacyMoxyConsumer.java +++ b/aai-resources/src/main/java/org/openecomp/aai/rest/LegacyMoxyConsumer.java @@ -48,7 +48,6 @@ import javax.ws.rs.core.UriInfo; import org.apache.cxf.jaxrs.ext.PATCH; import org.javatuples.Pair; - import org.openecomp.aai.dbmap.DBConnectionType; import org.openecomp.aai.exceptions.AAIException; import org.openecomp.aai.introspection.Introspector; @@ -58,12 +57,14 @@ import org.openecomp.aai.introspection.Version; import org.openecomp.aai.parsers.query.QueryParser; import org.openecomp.aai.rest.db.DBRequest; import org.openecomp.aai.rest.db.HttpEntry; +import org.openecomp.aai.rest.exceptions.AAIInvalidXMLNamespace; import org.openecomp.aai.rest.util.ValidateEncoding; import org.openecomp.aai.restcore.HttpMethod; import org.openecomp.aai.restcore.RESTAPI; import org.openecomp.aai.serialization.engines.QueryStyle; import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; import org.openecomp.aai.workarounds.RemoveDME2QueryParams; + import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; import com.google.common.base.Joiner; @@ -100,7 +101,7 @@ public class LegacyMoxyConsumer extends RESTAPI { MediaType mediaType = headers.getMediaType(); - return this.handleWrites(Action.PUT, mediaType, HttpMethod.PUT, content, versionParam, uri, headers, info, req); + return this.handleWrites(mediaType, HttpMethod.PUT, content, versionParam, uri, headers, info); } /** @@ -195,7 +196,7 @@ public class LegacyMoxyConsumer extends RESTAPI { MediaType mediaType = MediaType.APPLICATION_JSON_TYPE; - return this.handleWrites(Action.PUT, mediaType, HttpMethod.MERGE_PATCH, content, versionParam, uri, headers, info, req); + return this.handleWrites(mediaType, HttpMethod.MERGE_PATCH, content, versionParam, uri, headers, info); } @@ -513,7 +514,7 @@ public class LegacyMoxyConsumer extends RESTAPI { * @param req the req * @return the response */ - private Response handleWrites(Action aaiAction, MediaType mediaType, HttpMethod method, String content, String versionParam, String uri, HttpHeaders headers, UriInfo info, HttpServletRequest req) { + private Response handleWrites(MediaType mediaType, HttpMethod method, String content, String versionParam, String uri, HttpHeaders headers, UriInfo info) { Response response = null; TransactionalGraphEngine dbEngine = null; @@ -524,7 +525,7 @@ public class LegacyMoxyConsumer extends RESTAPI { String realTime = headers.getRequestHeaders().getFirst("Real-Time"); TitanTransaction g = null; Boolean success = true; - + try { validateRequest(info); @@ -548,6 +549,10 @@ public class LegacyMoxyConsumer extends RESTAPI { if (obj == null) { throw new AAIException("AAI_3000", "object could not be unmarshalled:" + content); } + + if (mediaType.toString().contains(MediaType.APPLICATION_XML) && !content.equals("<empty/>") && isEmptyObject(obj)) { + throw new AAIInvalidXMLNamespace(content); + } this.validateIntrospector(obj, loader, uriObject, method); @@ -589,6 +594,9 @@ public class LegacyMoxyConsumer extends RESTAPI { private boolean hasRelatedTo(URI uri) { return uri.toString().contains("/" + RestTokens.COUSIN + "/"); - + } + + protected boolean isEmptyObject(Introspector obj) { + return "{}".equals(obj.marshal(false)); } } diff --git a/aai-resources/src/main/java/org/openecomp/aai/rest/exceptions/AAIInvalidXMLNamespace.java b/aai-resources/src/main/java/org/openecomp/aai/rest/exceptions/AAIInvalidXMLNamespace.java new file mode 100644 index 0000000..e71e1f2 --- /dev/null +++ b/aai-resources/src/main/java/org/openecomp/aai/rest/exceptions/AAIInvalidXMLNamespace.java @@ -0,0 +1,40 @@ +/*- + * ============LICENSE_START======================================================= + * org.openecomp.aai + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.aai.rest.exceptions; + +import org.openecomp.aai.exceptions.AAIException; + +public class AAIInvalidXMLNamespace extends AAIException { + + private static final long serialVersionUID = 7487333042291858169L; + + public AAIInvalidXMLNamespace(String message) { + super("AAI_3011", message); + } + + public AAIInvalidXMLNamespace(Throwable cause) { + super("AAI_3011",cause); + } + + public AAIInvalidXMLNamespace(String message, Throwable cause) { + super("AAI_3011", cause, message); + } +} diff --git a/aai-resources/src/main/java/org/openecomp/aai/util/DeleteResource.java b/aai-resources/src/main/java/org/openecomp/aai/util/DeleteResource.java deleted file mode 100644 index 5e60c5c..0000000 --- a/aai-resources/src/main/java/org/openecomp/aai/util/DeleteResource.java +++ /dev/null @@ -1,229 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.aai.util; - -import java.lang.reflect.Field; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Properties; -import java.util.Scanner; -import java.util.UUID; - -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.ingestModel.DbMaps; -import org.openecomp.aai.ingestModel.IngestModelMoxyOxm; -import org.openecomp.aai.logging.ErrorLogHelper; -import com.att.eelf.configuration.Configuration; -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.common.base.CaseFormat; - - -public class DeleteResource { - - private static EELFLogger LOGGER; - private static final String FROMAPPID = "AAI-TOOLS"; - private static final String TRANSID = UUID.randomUUID().toString(); - // the logic below to parse the url is dependent on the node types - // code may need to be adjusted if different nodetypes are added here - private static final String[] nodeTypeList = {"complex", "availability-zone", "oam-network", - "dvs-switch", "vserver", "vpe", "vpls-pe"}; - - private static final String USAGE_STRING = "Usage: deleteTool.sh <resource-path>\n + " - + "for example: resource-path for a particular customer is business/customers/customer/global-customer-id-1 \n"; - - /** - * The main method. - * - * @param <T> the generic type - * @param args the arguments - */ - public static <T> void main(String[] args) { - - // Set the logging file properties to be used by EELFManager - Properties props = System.getProperties(); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_NAME, AAIConstants.AAI_DELTOOL_LOGBACK_PROPS); - props.setProperty(Configuration.PROPERTY_LOGGING_FILE_PATH, AAIConstants.AAI_HOME_ETC_APP_PROPERTIES); - LOGGER = EELFManager.getInstance().getLogger(DeleteResource.class); - String url = null; - try { - if ((args.length < 1) || ((args.length > 1) )) { - System.out.println("Insufficient or Invalid arguments"); - System.out.println(USAGE_STRING); - System.exit(1); - } - - Boolean bResVersionEnabled = false; - - try - { - String strEnableResVersion = AAIConfig.get(AAIConstants.AAI_RESVERSION_ENABLEFLAG); - if (strEnableResVersion != null && !strEnableResVersion.isEmpty()) - bResVersionEnabled = Boolean.valueOf(strEnableResVersion); - } - catch (Exception e) { - - } - - // Assume the config AAI_SERVER_URL has a last slash so remove if - // resource-path has it as the first char - String path = args[0].replaceFirst("^/", ""); - - Path p = Paths.get(path); - - // if the node type has one key - String resource = p.getName(p.getNameCount() - 2).toString(); - - IngestModelMoxyOxm moxyMod = new IngestModelMoxyOxm(); - DbMaps dbMaps = null; - try { - ArrayList <String> defaultVerLst = new ArrayList <String> (); - defaultVerLst.add( AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP) ); - moxyMod.init( defaultVerLst, false); - // Just make sure we can get DbMaps - don't actually need it until later. - dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP)); - } - catch (Exception ex){ - ErrorLogHelper.logError("AAI_7402", " ERROR - Could not get the DbMaps object: " + ex.getMessage()); - System.exit(1); - } - // if the node type has two keys - this assumes max 2 keys - if (!dbMaps.NodeKeyProps.containsKey(resource)) - resource = p.getName(p.getNameCount() - 3).toString(); - String resourceClass = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, resource); - resourceClass = "org.openecomp.aai.domain.yang." + resourceClass; - - String dMsg = "class=" + resourceClass; - System.out.println(dMsg); - LOGGER.debug(dMsg); - dMsg = "path=" + path; - System.out.println(dMsg); - LOGGER.debug(dMsg); - - if (bResVersionEnabled) - { - RestObject<T> restObj = new RestObject<T>(); - @SuppressWarnings("unchecked") - T t = (T)getInstance(Class.forName(resourceClass)); - restObj.set(t); - - try - { - RestController.<T>Get(t, FROMAPPID, TRANSID, path, restObj, false); - t = restObj.get(); - String infMsg = " GET resoruceversion succeeded\n"; - System.out.println(infMsg); - LOGGER.info(infMsg); - String resourceUpdateVersion = GetResourceVersion(t); - path += "?resource-version=" + resourceUpdateVersion; - } catch (AAIException e) { - if (e.getMessage().contains("with status=404") && resource.equals("named-query")) { - System.out.println("Delete succeeded, the resource doesn't exist in the DB. " + p); - System.exit(0); - } else { - System.out.println("Delete failed. Resource Not found in the DB."); - System.exit(1); - } - } catch (Exception e1){ - System.out.println("Delete failed. Resource Not found in the DB."); - System.exit(1); - } - } - - System.out.print("\nAre you sure you would like to delete the resource \n" + url + "? (y/n): "); - Scanner s = new Scanner(System.in); - s.useDelimiter(""); - String confirm = s.next(); - - if (!confirm.equalsIgnoreCase("y")) { - String infMsg = "User chose to exit before deleting"; - System.out.println(infMsg); - LOGGER.info(infMsg); - System.exit(1); - } - - RestController.Delete(FROMAPPID, TRANSID, path); - - s.close(); - System.exit(0); - - } catch (AAIException e) { - ErrorLogHelper.logException(e); - System.exit(1); - } catch (Exception e) { - ErrorLogHelper.logError("AAI_7402", e.getMessage()); - System.exit(1); - } - - } - - /** - * Gets the single instance of DeleteResource. - * - * @param <T> the generic type - * @param clazz the clazz - * @return single instance of DeleteResource - * @throws IllegalAccessException the illegal access exception - * @throws InstantiationException the instantiation exception - */ - public static <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException - { - return clazz.newInstance(); - } - - /** - * Gets the resource version. - * - * @param <T> the generic type - * @param resource the resource - * @return the string - */ - public static <T> String GetResourceVersion(T resource) - { - Field[] fields = resource.getClass().getDeclaredFields(); - if (fields != null) - { - for (Field field : fields) - { - try - { - field.setAccessible(true); - if ( field.getName().equalsIgnoreCase("resourceVersion") ) - { - Object obj = field.get(resource); - return (String)obj; - } - - - } - catch (Exception e) - { - - } - - - } - } - return null; - } -} diff --git a/aai-resources/src/main/java/org/openecomp/aai/util/PojoUtils.java b/aai-resources/src/main/java/org/openecomp/aai/util/PojoUtils.java deleted file mode 100644 index 870ddec..0000000 --- a/aai-resources/src/main/java/org/openecomp/aai/util/PojoUtils.java +++ /dev/null @@ -1,738 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.aai.util; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.core.JsonGenerationException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule; -import com.google.common.base.CaseFormat; -import com.google.common.collect.Multimap; -import com.thinkaurelius.titan.core.TitanVertex; -import org.apache.commons.io.output.ByteArrayOutputStream; -import org.eclipse.persistence.dynamic.DynamicEntity; -import org.eclipse.persistence.dynamic.DynamicType; -import org.eclipse.persistence.jaxb.MarshallerProperties; -import org.openecomp.aai.domain.model.AAIResource; -import org.openecomp.aai.exceptions.AAIException; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import java.io.IOException; -import java.io.StringWriter; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.*; -import java.util.Map.Entry; - -public class PojoUtils { - - /** - * Gets the key value list. - * - * @param <T> the generic type - * @param e the e - * @param clazz the clazz - * @return the key value list - * @throws IllegalAccessException the illegal access exception - * @throws IllegalArgumentException the illegal argument exception - * @throws InvocationTargetException the invocation target exception - */ - public <T> List<KeyValueList> getKeyValueList(Entity e, T clazz) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { - List<KeyValueList> kvList = e.getKeyValueList(); - Object value = null; - Method[] methods = clazz.getClass().getDeclaredMethods(); - String propertyName = ""; - - for (Method method : methods) { - if (method.getName().startsWith("get")) { - propertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3)); - if (!(method.getReturnType().getName().contains("aai")) || method.getReturnType().getName().contains("java.util.List")) { - value = method.invoke(clazz); - KeyValueList kv = new KeyValueList(); - kv.setKey(propertyName); - if (value != null) { - kv.setValue(value.toString()); - } else { - kv.setValue(""); - } - kvList.add(kv); - } - } - } - return kvList; - } - - /** - * Gets the json from object. - * - * @param <T> the generic type - * @param clazz the clazz - * @return the json from object - * @throws JsonGenerationException the json generation exception - * @throws JsonMappingException the json mapping exception - * @throws IOException Signals that an I/O exception has occurred. - */ - public <T> String getJsonFromObject(T clazz) throws JsonGenerationException, JsonMappingException, IOException { - return getJsonFromObject(clazz, false, true); - } - - /** - * Gets the json from object. - * - * @param <T> the generic type - * @param clazz the clazz - * @param wrapRoot the wrap root - * @param indent the indent - * @return the json from object - * @throws JsonGenerationException the json generation exception - * @throws JsonMappingException the json mapping exception - * @throws IOException Signals that an I/O exception has occurred. - */ - public <T> String getJsonFromObject(T clazz, boolean wrapRoot, boolean indent) throws JsonGenerationException, JsonMappingException, IOException { - ObjectMapper mapper = new ObjectMapper(); - - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - - mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - mapper.configure(SerializationFeature.INDENT_OUTPUT, indent); - mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, wrapRoot); - - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, wrapRoot); - - mapper.registerModule(new JaxbAnnotationModule()); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - mapper.writeValue(baos, clazz); - - return baos.toString(); - } - - /** - * Gets the json from dynamic object. - * - * @param ent the ent - * @param jaxbContext the jaxb context - * @param includeRoot the include root - * @return the json from dynamic object - * @throws JsonGenerationException the json generation exception - * @throws JsonMappingException the json mapping exception - * @throws IOException Signals that an I/O exception has occurred. - * @throws JAXBException the JAXB exception - */ - public String getJsonFromDynamicObject(DynamicEntity ent, org.eclipse.persistence.jaxb.JAXBContext jaxbContext, boolean includeRoot) throws JsonGenerationException, JsonMappingException, IOException, JAXBException { - org.eclipse.persistence.jaxb.JAXBMarshaller marshaller = jaxbContext.createMarshaller(); - - marshaller.setProperty(org.eclipse.persistence.jaxb.JAXBMarshaller.JAXB_FORMATTED_OUTPUT, false); - marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE) ; - marshaller.setProperty("eclipselink.json.include-root", includeRoot); - marshaller.setProperty("eclipselink.media-type", "application/json"); - StringWriter writer = new StringWriter(); - marshaller.marshal(ent, writer); - - return writer.toString(); - } - - /** - * Gets the xml from object. - * - * @param <T> the generic type - * @param clazz the clazz - * @return the xml from object - * @throws JAXBException the JAXB exception - */ - public <T> String getXmlFromObject(T clazz) throws JAXBException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - JAXBContext jc = JAXBContext.newInstance(clazz.getClass().getPackage().getName()); - - Marshaller marshaller = jc.createMarshaller(); - marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - marshaller.marshal(clazz, baos); - - return baos.toString(); - } - - /** - * Gets the lookup key. - * - * @param baseKey the base key - * @param lookupHash the lookup hash - * @param keyProps the key props - * @return the lookup key - */ - public String getLookupKey (String baseKey, HashMap<String,Object> lookupHash, Collection<String> keyProps) { - int baseKeyLen = baseKey.length(); - StringBuffer newKey = new StringBuffer(); - if (baseKeyLen > 0) { - newKey.append(baseKey); - } - - Iterator <String> keyPropI = keyProps.iterator(); - while( keyPropI.hasNext() ){ - String keyProp = keyPropI.next(); - if (baseKeyLen > 0) { - newKey.append("&"); - } - newKey.append(keyProp + "=" + lookupHash.get(keyProp)); - } - return newKey.toString(); - } - - /** - * Gets the lookup keys. - * - * @param lookupHashes the lookup hashes - * @param _dbRulesNodeKeyProps the db rules node key props - * @return the lookup keys - */ - public String getLookupKeys (LinkedHashMap<String,HashMap<String,Object>> lookupHashes, Multimap<String, String> _dbRulesNodeKeyProps) { - Iterator<String> it = lookupHashes.keySet().iterator(); - String lookupKeys = ""; - while (it.hasNext()) { - String objectType = (String)it.next(); - HashMap<String,Object> lookupHash = lookupHashes.get(objectType); - - Collection<String> keyProps = _dbRulesNodeKeyProps.get(objectType); - Iterator <String> keyPropI = keyProps.iterator(); - while( keyPropI.hasNext() ){ - lookupKeys += lookupHash.get(keyPropI.next()); - } - } - return lookupKeys; - } - - /** - * Gets the example object. - * - * @param <T> the generic type - * @param clazz the clazz - * @param singleton the singleton - * @return the example object - * @throws IllegalAccessException the illegal access exception - * @throws IllegalArgumentException the illegal argument exception - * @throws InvocationTargetException the invocation target exception - * @throws NoSuchMethodException the no such method exception - * @throws SecurityException the security exception - * @throws AAIException the AAI exception - */ - public <T> void getExampleObject(T clazz, boolean singleton) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, AAIException { - Method[] methods = clazz.getClass().getDeclaredMethods(); - String dnHypPropertyName = ""; - String upCamPropertyName = ""; - Random rand = new Random(); - int randInt = rand.nextInt(10000000); - - for (Method method : methods) { - boolean go = false; - if (method.getName().startsWith("get")) { - dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3)); - upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(3)); - go = true; - } else if (method.getName().startsWith("is")) { - dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(2)); - upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(2)); - go = true; - } - // don't return resource-version on a singleton - if (singleton && dnHypPropertyName.equals("resource-version")) { - go = false; - } - if (go) { - String retType = method.getReturnType().getName(); - if (!retType.contains("aai") && !retType.contains("java.util.List")) { - // get the setter - Method meth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType()); - - if (retType.contains("String")) { - String val = "example-" + dnHypPropertyName + "-val-" + randInt; - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("long")) { - Integer foo = rand.nextInt(100000); - meth.invoke(clazz, foo.longValue()); - } else if (retType.toLowerCase().contains("int")) { - meth.invoke(clazz, rand.nextInt(100000)); - } else if (retType.toLowerCase().contains("short")) { - Integer randShort = rand.nextInt(10000); - meth.invoke(clazz, randShort.shortValue()); - } else if (retType.toLowerCase().contains("boolean")) { - meth.invoke(clazz, true); - } - } - } - } - } - - - /** - * Gets the aai object from vertex. - * - * @param <T> the generic type - * @param clazz the clazz - * @param vert the vert - * @param _propertyDataTypeMap the property data type map - * @return the aai object from vertex - * @throws IllegalAccessException the illegal access exception - * @throws IllegalArgumentException the illegal argument exception - * @throws InvocationTargetException the invocation target exception - * @throws NoSuchMethodException the no such method exception - * @throws SecurityException the security exception - * @throws AAIException the AAI exception - */ - public <T> void getAaiObjectFromVertex(T clazz, TitanVertex vert, Map<String, String> _propertyDataTypeMap) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, AAIException { - Method[] methods = clazz.getClass().getDeclaredMethods(); - String dnHypPropertyName = ""; - String upCamPropertyName = ""; - for (Method method : methods) { - boolean go = false; - if (method.getName().startsWith("get")) { - dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3)); - upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(3)); - go = true; - } else if (method.getName().startsWith("is")) { - dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(2)); - upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(2)); - go = true; - } - if (go) { - String retType = method.getReturnType().getName(); - if (!retType.contains("aai") && !retType.contains("java.util.List")) { - // get the setter - Method meth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType()); - - if (retType.contains("String")) { - String val = (String)vert.<String>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("long")) { - String titanType = _propertyDataTypeMap.get(dnHypPropertyName); - - Long val = null; - // we have a case where the type in titan is "Integer" but in the POJO it's Long or long - if (titanType.toLowerCase().contains("int")) { - Integer intVal = (Integer)vert.<Integer>property(dnHypPropertyName).orElse(null); - if (intVal != null) { - val = intVal.longValue(); - } - } else { - val = (Long)vert.<Long>property(dnHypPropertyName).orElse(null); - } - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("int")) { - Integer val = (Integer)vert.<Integer>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("short")) { - Short val = (Short)vert.<Short>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("boolean")) { - Boolean val = (Boolean)vert.<Boolean>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } - } - } - } - } - - /** - * Gets the topology object. - * - * @param <T> the generic type - * @param clazz the clazz - * @param _dbRulesNodeNameProps the db rules node name props - * @param _dbRulesNodeKeyProps the db rules node key props - * @param vert the vert - * @return the topology object - * @throws IllegalAccessException the illegal access exception - * @throws IllegalArgumentException the illegal argument exception - * @throws InvocationTargetException the invocation target exception - * @throws NoSuchMethodException the no such method exception - * @throws SecurityException the security exception - * @throws AAIException the AAI exception - */ - public <T> void getTopologyObject(T clazz, Multimap<String, String> _dbRulesNodeNameProps, Multimap<String, String> _dbRulesNodeKeyProps, TitanVertex vert) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, AAIException { - Method[] methods = clazz.getClass().getDeclaredMethods(); - String dnHypPropertyName = ""; -// Object value = null; - List<String> includeProps = new ArrayList<String>(); - - if ("false".equals(AAIConfig.get("aai.notification.topology.allAttrs", "false"))) { - for (Method method : methods) { - if (method.getName().startsWith("is")) { - dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(2)); - String upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(2)); - String retType = method.getReturnType().getName(); - if (retType.equals("java.lang.Boolean")) { - // get the setter - Method setterMeth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType()); - setterMeth.invoke(clazz, (Boolean)null); - } - } - } - String dnHypClassName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,clazz.getClass().getSimpleName()); - Collection<String> keepProps = _dbRulesNodeNameProps.get(dnHypClassName); - Iterator <String> keepPropI = keepProps.iterator(); - while( keepPropI.hasNext() ){ - includeProps.add(keepPropI.next()); - } - Collection<String> keepProps2 = _dbRulesNodeKeyProps.get(dnHypClassName); - Iterator <String> keepPropI2 = keepProps2.iterator(); - while( keepPropI2.hasNext() ){ - includeProps.add(keepPropI2.next()); - } - } - - for (Method method : methods) { - if (method.getName().startsWith("get")) { - dnHypPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,method.getName().substring(3)); - if (includeProps.size() > 0) { - if (!includeProps.contains(dnHypPropertyName)) { - continue; - } - } - String upCamPropertyName = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_CAMEL,method.getName().substring(3)); - String retType = method.getReturnType().getName(); - if (!retType.contains("aai") && !retType.contains("java.util.List")) { - // get the setter - Method meth = clazz.getClass().getMethod("set" + upCamPropertyName, method.getReturnType()); - - if (retType.contains("String")) { - String val = (String)vert.<String>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("long")) { - Long val = (Long)vert.<Long>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("int")) { - Integer val = (Integer)vert.<Integer>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } else if (retType.toLowerCase().contains("short")) { - Short val = (Short)vert.<Short>property(dnHypPropertyName).orElse(null); - if (val != null) { - meth.invoke(clazz, val); - } - } - } - } - } - } - - /** - * Gets the dynamic topology object. - * - * @param aaiRes the aai res - * @param meObjectType the me object type - * @param _dbRulesNodeNameProps the db rules node name props - * @param _dbRulesNodeKeyProps the db rules node key props - * @param _propertyDataTypeMap the property data type map - * @param vert the vert - * @return the dynamic topology object - * @throws AAIException the AAI exception - */ - public DynamicEntity getDynamicTopologyObject(AAIResource aaiRes, DynamicType meObjectType, Multimap<String, String> _dbRulesNodeNameProps, - Multimap<String, String> _dbRulesNodeKeyProps, Map<String, String> _propertyDataTypeMap, TitanVertex vert) throws AAIException { - - DynamicEntity meObject = meObjectType.newDynamicEntity(); - - List<String> includeProps = new ArrayList<String>(); - - if ("false".equals(AAIConfig.get("aai.notification.topology.allAttrs", "false"))) { - String dnHypClassName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,meObjectType.getJavaClass().getSimpleName()); - Collection<String> keepProps = _dbRulesNodeNameProps.get(dnHypClassName); - Iterator <String> keepPropI = keepProps.iterator(); - while( keepPropI.hasNext() ){ - includeProps.add(keepPropI.next()); - } - Collection<String> keepProps2 = _dbRulesNodeKeyProps.get(dnHypClassName); - Iterator <String> keepPropI2 = keepProps2.iterator(); - while( keepPropI2.hasNext() ) { - includeProps.add(keepPropI2.next()); - } - } - - - - for (String attrName : aaiRes.getStringFields()) { - if (includeProps.contains(attrName)) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), vert.<String>property(attrName).orElse(null)); - } - } - // the attrName might need to be converted to camel case!!! - for (String attrName : aaiRes.getLongFields()) { - if (includeProps.contains(attrName)) { - String titanType = _propertyDataTypeMap.get(attrName); - - Long val = null; - // we have a case where the type in titan is "Integer" but in the POJO it's Long or long - if (titanType.toLowerCase().contains("int")) { - Integer intVal = (Integer)vert.<Integer>property(attrName).orElse(null); - if (intVal != null) { - val = intVal.longValue(); - } - } else { - val = (Long)vert.<Long>property(attrName).orElse(null); - } - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - - for (String attrName : aaiRes.getIntFields()) { - if (includeProps.contains(attrName)) { - Integer val = (Integer)vert.<Integer>property(attrName).orElse(null); - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - - for (String attrName : aaiRes.getShortFields()) { - if (includeProps.contains(attrName)) { - String titanType = _propertyDataTypeMap.get(attrName); - - Short val = null; - // we have a case where the type in titan is "Integer" but in the POJO it's Long or long - if (titanType.toLowerCase().contains("int")) { - Integer intVal = (Integer)vert.<Integer>property(attrName).orElse(null); - if (intVal != null) { - val = intVal.shortValue(); - } - } else { - val = (Short)vert.<Short>property(attrName).orElse(null); - } - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - - for (String attrName : aaiRes.getBooleanFields()) { - if (includeProps.contains(attrName)) { - Boolean val = (Boolean)vert.<Boolean>property(attrName).orElse(null); - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - return meObject; - } - - /** - * Gets the aai dynamic object from vertex. - * - * @param aaiRes the aai res - * @param meObject the me object - * @param vert the vert - * @param _propertyDataTypeMap the property data type map - * @return the aai dynamic object from vertex - */ - public void getAaiDynamicObjectFromVertex(AAIResource aaiRes, DynamicEntity meObject, TitanVertex vert, - Map<String, String> _propertyDataTypeMap) { - getAaiDynamicObjectFromVertex(aaiRes, meObject, vert, _propertyDataTypeMap, null); - } - - /** - * Gets the aai dynamic object from vertex. - * - * @param aaiRes the aai res - * @param meObject the me object - * @param vert the vert - * @param _propertyDataTypeMap the property data type map - * @param propertyOverRideHash the property over ride hash - * @return the aai dynamic object from vertex - */ - @SuppressWarnings("unchecked") - public void getAaiDynamicObjectFromVertex(AAIResource aaiRes, DynamicEntity meObject, TitanVertex vert, - Map<String, String> _propertyDataTypeMap, HashMap<String, Object> propertyOverRideHash) { - - for (String attrName : aaiRes.getStringFields()) { - if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), vert.<String>property(dbAliasWorkaround(attrName)).orElse(null)); - } - } - - for (String attrName : aaiRes.getStringListFields()) { - if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), vert.<ArrayList<String>>property(attrName).orElse(null)); - } - } - - // the attrName might need to be converted to camel case!!! - for (String attrName : aaiRes.getLongFields()) { - String titanType = _propertyDataTypeMap.get(attrName); - Long val = null; - // we have a case where the type in titan is "Integer" but in the POJO it's Long or long - if (titanType.toLowerCase().contains("int")) { - Object vertexVal = vert.property(attrName).orElse(null); - if (vertexVal != null) { - if (vertexVal instanceof Integer) { - val = ((Integer)vertexVal).longValue(); - - } else { - val = (Long)vert.<Long>property(attrName).orElse(null); - } - } - } else { - val = (Long)vert.<Long>property(attrName).orElse(null); - } - if (val != null) { - if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - } - - for (String attrName : aaiRes.getIntFields()) { - Integer val = (Integer)vert.<Integer>property(attrName).orElse(null); - if (val != null) { - if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - } - - for (String attrName : aaiRes.getShortFields()) { - String titanType = _propertyDataTypeMap.get(attrName); - Short val = null; - // we have a case where the type in titan is "Integer" but in the POJO it's Long or long - if (titanType.toLowerCase().contains("int")) { - Integer intVal = (Integer)vert.<Integer>property(attrName).orElse(null); - if (intVal != null) { - val = intVal.shortValue(); - } - } else { - val = (Short)vert.<Short>property(attrName).orElse(null); - } - if (val != null) { - if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - } - - for (String attrName : aaiRes.getBooleanFields()) { - Boolean val = (Boolean)vert.<Boolean>property(attrName).orElse(null); - // This is not ideal, but moxy isn't marshalling these attributes. - // TODO: Figure out how to see the default-value from the OXM at startup (or at runtime). - String dnHypClassName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_HYPHEN,aaiRes.getSimpleName()); - if (val == null && AAIConfig.getDefaultBools().containsKey(dnHypClassName)) { - if (AAIConfig.getDefaultBools().get(dnHypClassName).contains(attrName)) { - val = false; - } - } - if (val != null) { - if (propertyOverRideHash == null || (propertyOverRideHash != null && propertyOverRideHash.containsKey(attrName))) { - meObject.set((CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,attrName)), val); - } - } - } - - } - - private String dbAliasWorkaround(String propName) { - final String modelInvariantIdLocal = "model-invariant-id-local"; - final String modelVersionIdLocal = "model-version-id-local"; - final String modelInvariantId = "model-invariant-id"; - final String modelVersionId = "model-version-id"; - - if (propName.equals(modelInvariantId)) { - return modelInvariantIdLocal; - } - if (propName.equals(modelVersionId)) { - return modelVersionIdLocal; - } - - return propName; - - } - - /** - * Gets the dynamic example object. - * - * @param childObject the child object - * @param aaiRes the aai res - * @param singleton the singleton - * @return the dynamic example object - */ - public void getDynamicExampleObject(DynamicEntity childObject, AAIResource aaiRes, boolean singleton) { - // TODO Auto-generated method stub - - Random rand = new Random(); - Integer randInt = rand.nextInt(100000); - long range = 100000000L; - long randLong = (long)(rand.nextDouble()*range); - Integer randShrt = rand.nextInt(20000); - short randShort = randShrt.shortValue(); - - for (String dnHypAttrName : aaiRes.getStringFields()) { - - if (singleton && ("resource-version").equals(dnHypAttrName)) { - continue; - } - - String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName); - childObject.set(dnCamAttrName, "example-" + dnHypAttrName + "-val-" + randInt); - - } - - for (String dnHypAttrName : aaiRes.getStringListFields()) { - ArrayList<String> exampleList = new ArrayList<String>(); - exampleList.add("example-" + dnHypAttrName + "-val-" + randInt + "-" + 1); - exampleList.add("example-" + dnHypAttrName + "-val-" + randInt + "-" + 2); - String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName); - childObject.set(dnCamAttrName, exampleList); - } - - // the attrName might need to be converted to camel case!!! - for (String dnHypAttrName : aaiRes.getLongFields()) { - String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName); - childObject.set(dnCamAttrName, randLong); - } - - for (String dnHypAttrName : aaiRes.getIntFields()) { - String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName); - childObject.set(dnCamAttrName, randInt); - } - - for (String dnHypAttrName : aaiRes.getShortFields()) { - String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName); - childObject.set(dnCamAttrName, randShort); - } - - for (String dnHypAttrName : aaiRes.getBooleanFields()) { - String dnCamAttrName = CaseFormat.LOWER_HYPHEN.to(CaseFormat.LOWER_CAMEL,dnHypAttrName); - childObject.set(dnCamAttrName, Boolean.TRUE); - } - } -} diff --git a/aai-resources/src/main/java/org/openecomp/aai/util/PutResource.java b/aai-resources/src/main/java/org/openecomp/aai/util/PutResource.java index b4275b7..ced51cd 100644 --- a/aai-resources/src/main/java/org/openecomp/aai/util/PutResource.java +++ b/aai-resources/src/main/java/org/openecomp/aai/util/PutResource.java @@ -24,17 +24,21 @@ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.lang.reflect.Field; +import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; import java.security.KeyManagementException; -import java.util.ArrayList; import java.util.Properties; import java.util.UUID; +import org.openecomp.aai.db.props.AAIProperties; import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.ingestModel.DbMaps; -import org.openecomp.aai.ingestModel.IngestModelMoxyOxm; +import org.openecomp.aai.introspection.Loader; +import org.openecomp.aai.introspection.LoaderFactory; +import org.openecomp.aai.introspection.ModelType; import org.openecomp.aai.logging.ErrorLogHelper; +import org.openecomp.aai.parsers.uri.URIToObject; + import com.att.eelf.configuration.Configuration; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -98,31 +102,17 @@ public class PutResource { System.out.println(USAGE_STRING); System.exit(1); } - + + Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); // Assume the config AAI_SERVER_URL has a last slash so remove if // resource-path has it as the first char - String path = args[0].replaceFirst("^/", ""); + URI uri = new URI(args[0]); + String path = args[0].replaceFirst("^/", ""); Path p = Paths.get(path); - // if the node type has one key - String resource = p.getName(p.getNameCount() - 2).toString(); - // if the node type has two keys - this assumes max 2 keys - IngestModelMoxyOxm moxyMod = new IngestModelMoxyOxm(); - DbMaps dbMaps = null; - try { - ArrayList <String> defaultVerLst = new ArrayList <String> (); - defaultVerLst.add( AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP) ); - moxyMod.init( defaultVerLst, false); - // Just make sure we can get DbMaps - don't actually need it until later. - dbMaps = IngestModelMoxyOxm.dbMapsContainer.get(AAIConfig.get(AAIConstants.AAI_DEFAULT_API_VERSION_PROP)); - } - catch (Exception ex){ - ErrorLogHelper.logError("AAI_7402", "ERROR - Could not get the DbMaps object."); - System.exit(1); - } + URIToObject parser = new URIToObject(loader, uri); + String resource = parser.getEntityName(); - if (!dbMaps.NodeKeyProps.containsKey(resource)) - resource = p.getName(p.getNameCount() - 3).toString(); String resourceClass = CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_CAMEL, resource); resourceClass = "org.openecomp.aai.domain.yang." + resourceClass; diff --git a/aai-resources/src/main/java/org/openecomp/aai/util/StoreNotificationEvent.java b/aai-resources/src/main/java/org/openecomp/aai/util/StoreNotificationEvent.java index 181627b..a73c4c8 100644 --- a/aai-resources/src/main/java/org/openecomp/aai/util/StoreNotificationEvent.java +++ b/aai-resources/src/main/java/org/openecomp/aai/util/StoreNotificationEvent.java @@ -21,9 +21,6 @@ package org.openecomp.aai.util; import java.io.StringWriter; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Iterator; import java.util.UUID; @@ -33,7 +30,6 @@ import org.eclipse.persistence.dynamic.DynamicEntity; import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; import org.json.JSONException; import org.json.JSONObject; - import org.openecomp.aai.dmaap.AAIDmaapEventJMSProducer; import org.openecomp.aai.domain.notificationEvent.NotificationEvent; import org.openecomp.aai.exceptions.AAIException; @@ -297,6 +293,9 @@ public class StoreNotificationEvent { entityJsonObjectUpdated.put("event-header", entityHeader); entityJsonObjectUpdated.put("cambria.partition", cambriaPartition); + String transId = entityHeader.getString("id"); + String fromAppId = entityHeader.getString("source-name"); + Iterator<String> iter = entityJsonObject.keys(); JSONObject entity = new JSONObject(); if (iter.hasNext()) { @@ -320,9 +319,8 @@ public class StoreNotificationEvent { * @return the string */ public static String genDate() { - Date date = new Date(); - DateFormat formatter = new SimpleDateFormat("YYYYMMdd-HH:mm:ss:SSS"); - return formatter.format(date); + FormatDate fd = new FormatDate("YYMMdd-HH:mm:ss:SSS"); + return fd.getDateTime(); } /** @@ -331,9 +329,8 @@ public class StoreNotificationEvent { * @return the string */ public static String genDate2() { - Date date = new Date(); - DateFormat formatter = new SimpleDateFormat("YYYYMMddHHmmss"); - return formatter.format(date); + FormatDate fd = new FormatDate("YYYYMMddHHmmss"); + return fd.getDateTime(); } } |