From 4eb05d39786cdd98de266c359e18fa7087af8ab2 Mon Sep 17 00:00:00 2001 From: Ward Schweitzer Date: Thu, 10 May 2018 15:57:37 -0400 Subject: [PATCH 001/126] Attempting to enforce some kind of limitation on the number of idle connections without sacrificing too much performance. --- .../nasa/jpl/view_repo/db/PostgresHelper.java | 18 +- .../nasa/jpl/view_repo/db/PostgresPool.java | 171 ++++++++++++++---- .../jpl/view_repo/db/PostgresPoolTest.java | 157 ++++++++++++++++ 3 files changed, 302 insertions(+), 44 deletions(-) create mode 100644 mms-ent/repo-amp/src/test/java/gov/nasa/jpl/view_repo/db/PostgresPoolTest.java diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java index c80d03db..c810e8fc 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java @@ -96,19 +96,19 @@ public Connection getConn(String type) { } public void close() { - try { - if (this.connMap.containsKey(project)) { - this.connMap.get(project).close(); - } - } catch (SQLException e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - } + closeConnection(project); } public void closeConfig() { + closeConnection("config"); + } + + private void closeConnection(String key) + { try { - if (this.connMap.containsKey("config")) { - this.connMap.get("config").close(); + Connection connection = this.connMap.remove(key); + if (connection != null) { + connection.close(); } } catch (SQLException e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java index 71f36830..afa5ac95 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java @@ -4,62 +4,124 @@ import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.RemovalCause; +import com.google.common.cache.RemovalNotification; import org.apache.commons.dbcp.BasicDataSource; import gov.nasa.jpl.view_repo.util.EmsConfig; +import org.apache.commons.dbcp.DelegatingConnection; +import org.apache.log4j.Logger; public class PostgresPool { + static Logger logger = Logger.getLogger(PostgresPool.class); - private static final int MAX_IDLE_CONN = 2; - private static final int MAX_ACTIVE_CONN = 96; + static final int MAX_IDLE_CONN = 2; + static final int MIN_IDLE_CONN = 0; + static final int MAX_ACTIVE_CONN = 96; + static final int MAX_CONN_LIMIT = 192; - private static final String PG_CONN_MAX = "pg.conn.max"; - private static final String PG_USER = "pg.user"; - private static final String PG_PASS = "pg.pass"; + static final String PG_CONN_MAX = "pg.conn.max"; + static final String PG_USER = "pg.user"; + static final String PG_PASS = "pg.pass"; + static final String PG_SEC = "pg.secured"; + private String host; + private String name; private String connectString; - private static Map dataSource = new HashMap<>(); - private Map bds = new HashMap<>(); - - private PostgresPool(String connectString) { - this.connectString = connectString; - if (!bds.containsKey(connectString)) { - bds.put(connectString, new BasicDataSource()); - bds.get(connectString).setDriverClassName("org.postgresql.Driver"); - bds.get(connectString).setUrl(connectString); - bds.get(connectString).setUsername(EmsConfig.get(PG_USER)); - bds.get(connectString).setPassword(EmsConfig.get(PG_PASS)); - bds.get(connectString).setInitialSize(10); - bds.get(connectString).setMaxIdle(MAX_IDLE_CONN); - bds.get(connectString).setMaxActive((!EmsConfig.get(PG_CONN_MAX).equals("")) ? Integer.parseInt(EmsConfig.get( - PG_CONN_MAX)) : MAX_ACTIVE_CONN); - bds.get(connectString).setMaxWait(10000); - bds.get(connectString).setDefaultAutoCommit(true); - bds.get(connectString).setRemoveAbandonedTimeout(1); - bds.get(connectString).setLogAbandoned(true); - bds.get(connectString).setRemoveAbandoned(true); + private BasicDataSource bds = null; + + private static Map dataSources = new HashMap<>(); + private static Map> activeDataSources = new HashMap<>(); + + interface IBasicDataSourceFactory { + BasicDataSource getNewBasicDataSource(); + } + + private static IBasicDataSourceFactory basicDataSourceFactory = null; + + private PostgresPool(String host, String name) { + this.host = host; + this.name = name; + this.connectString = getConnectString(host, name); + + this.bds = getBasicDataSourceFactory().getNewBasicDataSource(); + this.bds.setDriverClassName("org.postgresql.Driver"); + this.bds.setUrl(this.connectString); + this.bds.setUsername(EmsConfig.get(PG_USER)); + this.bds.setPassword(EmsConfig.get(PG_PASS)); + this.bds.setInitialSize(10); + this.bds.setMaxIdle(MAX_IDLE_CONN); + this.bds.setMinIdle(MIN_IDLE_CONN); + this.bds.setMaxActive((!EmsConfig.get(PG_CONN_MAX).equals("")) ? Integer.parseInt(EmsConfig.get( + PG_CONN_MAX)) : MAX_ACTIVE_CONN); + this.bds.setMaxWait(10000); + this.bds.setDefaultAutoCommit(true); + this.bds.setRemoveAbandonedTimeout(1); + this.bds.setLogAbandoned(true); + this.bds.setRemoveAbandoned(true); + this.bds.setTimeBetweenEvictionRunsMillis(1000*60); + this.bds.setMinEvictableIdleTimeMillis(1000*60*5); + if(EmsConfig.get(PG_SEC).toLowerCase().equals("true")){ + this.bds.setConnectionProperties("ssl=true"); } } - public static PostgresPool getInstance(String host, String name) { - String connectString = host + name; - if (!dataSource.containsKey(connectString)) { - dataSource.put(connectString, newInstance(host, name)); + private static String getConnectString(String host, String name) { + return host + name; + } + + public static synchronized PostgresPool getInstance(String host, String name) { + String connectString = getConnectString(host, name); + Cache cache = getActiveDatasetCache(host); + PostgresPool pool = cache.getIfPresent(connectString); + if(pool == null){ + pool = dataSources.get(connectString); + if (pool == null) { + pool = newInstance(host, name); + dataSources.put(connectString, pool); + } } - return dataSource.get(connectString); + return pool; } private static PostgresPool newInstance(String host, String name) { - return new PostgresPool(host + name); + return new PostgresPool(host, name); } public Connection getConnection() throws SQLException { - return this.bds.get(connectString).getConnection(); + goActive(); + Connection connection = this.bds.getConnection(); + updatePool(); + return connection; + } + + private void updatePool() { + getActiveDatasetCache(host).put(this.connectString, this); + } + + private int getWeight() { + return this.bds.getNumActive() + this.bds.getNumIdle(); + } + + private void goActive() { + this.bds.setMaxIdle(MAX_IDLE_CONN); + } + + private void goIdle() { + this.bds.setMaxIdle(MIN_IDLE_CONN); + if(this.bds.getNumActive() > 0){ + logger.warn("Database connection pool (" + + getConnectString(host, name) + + ") with active connections was instructed to go idle. Database may be overloaded"); + } } public static Connection getStandaloneConnection(String host, String name) throws SQLException { - BasicDataSource bds = new BasicDataSource(); + BasicDataSource bds = getBasicDataSourceFactory().getNewBasicDataSource(); bds.setDriverClassName("org.postgresql.Driver"); bds.setUrl(host + name); bds.setUsername(EmsConfig.get(PG_USER)); @@ -81,13 +143,52 @@ public static Connection getStandaloneConnection(String host, String name) throw */ static void removeConnection(String host, String name) { String connectString; + //TODO: Why is this different here?? if (!name.startsWith("_")) { connectString = host + "_" + name; } else { connectString = host + name; } - if (dataSource.containsKey(connectString)) { - dataSource.remove(connectString); + dataSources.remove(connectString); + getActiveDatasetCache(host).invalidate(connectString); + } + + private static Cache getActiveDatasetCache(String host){ + Cache cache = activeDataSources.get((host)); + + if(cache == null) { + cache = CacheBuilder.newBuilder() + .maximumWeight(MAX_CONN_LIMIT) + .weigher((String key, PostgresPool pool) -> pool.getWeight()) + .expireAfterAccess(5, TimeUnit.MINUTES) + .removalListener((RemovalNotification v) -> { + if (v.getCause() != RemovalCause.REPLACED) + v.getValue().goIdle(); + }) + .build(); + activeDataSources.put(host, cache); } + return cache; + } + + + public static IBasicDataSourceFactory getBasicDataSourceFactory() { + if(basicDataSourceFactory == null) + basicDataSourceFactory = () -> new BasicDataSource(); + return basicDataSourceFactory; + } + + public static void setBasicDataSourceFactory(IBasicDataSourceFactory basicDataSourceFactory) { + PostgresPool.basicDataSourceFactory = basicDataSourceFactory; } + + static void purgeDatabasePools(){ + activeDataSources.clear(); + dataSources.clear(); + } + static void idleDatabasePools(){ + for(Cache cache : activeDataSources.values()) + cache.invalidateAll(); + } + } diff --git a/mms-ent/repo-amp/src/test/java/gov/nasa/jpl/view_repo/db/PostgresPoolTest.java b/mms-ent/repo-amp/src/test/java/gov/nasa/jpl/view_repo/db/PostgresPoolTest.java new file mode 100644 index 00000000..45e04ea3 --- /dev/null +++ b/mms-ent/repo-amp/src/test/java/gov/nasa/jpl/view_repo/db/PostgresPoolTest.java @@ -0,0 +1,157 @@ +package gov.nasa.jpl.view_repo.db; + +import gov.nasa.jpl.view_repo.util.EmsConfig; +import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp.DelegatingConnection; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.sql.Connection; +import java.sql.SQLException; + +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.*; +import static org.mockito.internal.verification.VerificationModeFactory.atLeast; +import static org.mockito.internal.verification.VerificationModeFactory.times; + +/** + * Created by lm392c on 4/19/2018. + */ +public class PostgresPoolTest { + + + @Before + public void setup() { + EmsConfig.setProperty(PostgresPool.PG_CONN_MAX, "96"); + EmsConfig.setProperty(PostgresPool.PG_SEC, "true"); + } + + @After + public void teardown() { + PostgresPool.purgeDatabasePools(); + } + + @Test + public void testPoolCreationGoActive() throws SQLException { + + PostgresPool.IBasicDataSourceFactory mockFactory = mock(PostgresPool.IBasicDataSourceFactory.class); + PostgresPool.setBasicDataSourceFactory(mockFactory); + + BasicDataSource mockBasicDataSource = mock(BasicDataSource.class); + Connection mockConnection = mock(Connection.class); + + when(mockFactory.getNewBasicDataSource()).thenReturn(mockBasicDataSource); + when(mockBasicDataSource.getConnection()).thenReturn(mockConnection); + + Connection connection = PostgresPool.getInstance("host", "name").getConnection(); + + assertSame(mockConnection, connection); + + verify(mockBasicDataSource, atLeast(1)).setMaxIdle(PostgresPool.MAX_IDLE_CONN); + verify(mockBasicDataSource, never()).setMaxIdle(PostgresPool.MIN_IDLE_CONN); + } + + @Test + public void testPoolNoActiveOverflowBySize() throws SQLException { + + PostgresPool.IBasicDataSourceFactory mockFactory = mock(PostgresPool.IBasicDataSourceFactory.class); + PostgresPool.setBasicDataSourceFactory(mockFactory); + + BasicDataSource mockBasicDataSource = mock(BasicDataSource.class); + Connection mockConnection = mock(Connection.class); + + when(mockFactory.getNewBasicDataSource()).thenReturn(mockBasicDataSource); + when(mockBasicDataSource.getConnection()).thenReturn(mockConnection); + + when(mockBasicDataSource.getNumIdle()).thenReturn(1); + when(mockBasicDataSource.getNumActive()).thenReturn(1); + + for(int count = 0; count < PostgresPool.MAX_CONN_LIMIT/4; ++count){ + PostgresPool.getInstance("host", String.valueOf(count)).getConnection(); + } + + verify(mockBasicDataSource, never()).setMaxIdle(PostgresPool.MIN_IDLE_CONN); + } + + @Test + public void testPoolActiveOverflow() throws SQLException { + + PostgresPool.IBasicDataSourceFactory mockFactory = mock(PostgresPool.IBasicDataSourceFactory.class); + PostgresPool.setBasicDataSourceFactory(mockFactory); + + BasicDataSource mockBasicDataSource = mock(BasicDataSource.class); + Connection mockConnection = mock(Connection.class); + + when(mockFactory.getNewBasicDataSource()).thenReturn(mockBasicDataSource); + when(mockBasicDataSource.getConnection()).thenReturn(mockConnection); + + when(mockBasicDataSource.getNumIdle()).thenReturn(1); + when(mockBasicDataSource.getNumActive()).thenReturn(1); + + for(int count = 0; count < PostgresPool.MAX_CONN_LIMIT/2 + 1; ++count){ + PostgresPool.getInstance("host", String.valueOf(count)).getConnection(); + } + + verify(mockBasicDataSource, atLeast(1)).setMaxIdle(PostgresPool.MIN_IDLE_CONN); + } + + @Test + public void testPoolNoActiveOverflowByMultiHost() throws SQLException { + + PostgresPool.IBasicDataSourceFactory mockFactory = mock(PostgresPool.IBasicDataSourceFactory.class); + PostgresPool.setBasicDataSourceFactory(mockFactory); + + BasicDataSource mockBasicDataSource = mock(BasicDataSource.class); + Connection mockConnection = mock(Connection.class); + + when(mockFactory.getNewBasicDataSource()).thenReturn(mockBasicDataSource); + when(mockBasicDataSource.getConnection()).thenReturn(mockConnection); + + when(mockBasicDataSource.getNumIdle()).thenReturn(1); + when(mockBasicDataSource.getNumActive()).thenReturn(1); + + for(int count = 0; count < PostgresPool.MAX_CONN_LIMIT/2 + 1; ++count){ + PostgresPool.getInstance(String.format("host%d", count), String.valueOf(count)).getConnection(); + } + + verify(mockBasicDataSource, never()).setMaxIdle(PostgresPool.MIN_IDLE_CONN); + } + + @Test + public void testPoolInactiveToActive() throws SQLException { + PostgresPool.IBasicDataSourceFactory mockFactory = mock(PostgresPool.IBasicDataSourceFactory.class); + PostgresPool.setBasicDataSourceFactory(mockFactory); + + BasicDataSource mockBasicDataSource = mock(BasicDataSource.class); + Connection mockConnection = mock(Connection.class); + + when(mockFactory.getNewBasicDataSource()).thenReturn(mockBasicDataSource); + when(mockBasicDataSource.getConnection()).thenReturn(mockConnection); + + when(mockBasicDataSource.getNumIdle()).thenReturn(1); + when(mockBasicDataSource.getNumActive()).thenReturn(1); + + PostgresPool instance = PostgresPool.getInstance("host", "name"); + instance.getConnection(); + + reset(mockBasicDataSource); + + PostgresPool.idleDatabasePools(); + + verify(mockBasicDataSource, atLeast(1)).setMaxIdle(PostgresPool.MIN_IDLE_CONN); + verify(mockBasicDataSource, never()).setMaxIdle(PostgresPool.MAX_IDLE_CONN); + + reset(mockBasicDataSource); + + PostgresPool instance2 = PostgresPool.getInstance("host", "name"); + instance2.getConnection(); + + assertSame(instance, instance2); + + verify(mockBasicDataSource, never()).setMaxIdle(PostgresPool.MIN_IDLE_CONN); + verify(mockBasicDataSource, atLeast(1)).setMaxIdle(PostgresPool.MAX_IDLE_CONN); + } + +} From 940a535a6eec808ce01d9ce41390c64d56cfd557 Mon Sep 17 00:00:00 2001 From: Aydin Atay Date: Fri, 6 Apr 2018 09:16:20 -0400 Subject: [PATCH 002/126] A.A. Sprint 17, Task 572567 - Use try-with-resources or close this "Connection" in a "finally" clause. --- .../gov/nasa/jpl/view_repo/connections/JmsConnection.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java index 9244f70d..2156f6d3 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java @@ -202,12 +202,13 @@ public boolean publishMessage(String msg, String eventType) { // Tell the producer to send the message producer.send(message); - // Clean up - session.close(); - connection.close(); } catch (Exception e) { logger.error("JMS exception caught, probably means JMS broker not up"); status = false; + } finally { + // Clean up + session.close(); + connection.close(); } return status; From 3f0694015d91f31cd689000653e3331482ccced0 Mon Sep 17 00:00:00 2001 From: Aydin Atay Date: Fri, 6 Apr 2018 09:25:13 -0400 Subject: [PATCH 003/126] A.A. Sprint 17, Task 572570 - Use try-with-resources or close this "Session" in a "finally" clause. --- .../java/gov/nasa/jpl/view_repo/connections/JmsConnection.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java index 2156f6d3..af271cbb 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java @@ -205,8 +205,7 @@ public boolean publishMessage(String msg, String eventType) { } catch (Exception e) { logger.error("JMS exception caught, probably means JMS broker not up"); status = false; - } finally { - // Clean up + } finally { // Clean up session.close(); connection.close(); } From eedd34d1e8bbc86d4735b431c6f7ae95ba4e04f7 Mon Sep 17 00:00:00 2001 From: Aydin Atay Date: Fri, 6 Apr 2018 09:29:06 -0400 Subject: [PATCH 004/126] A.A. Sprint 17, Task 572573 - Use try-with-resources or close this "MessageProducer" in a "finally" clause. --- .../java/gov/nasa/jpl/view_repo/connections/JmsConnection.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java index af271cbb..f70c236c 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java @@ -206,6 +206,7 @@ public boolean publishMessage(String msg, String eventType) { logger.error("JMS exception caught, probably means JMS broker not up"); status = false; } finally { // Clean up + producer.close(); session.close(); connection.close(); } From 818f8725d9c9401399f00325f2f1bb1130a88bdd Mon Sep 17 00:00:00 2001 From: Aydin Atay Date: Fri, 6 Apr 2018 10:46:12 -0400 Subject: [PATCH 005/126] A.A. Sprint 17, Task 572757 - Use try-with-resources or close this "Statement" in a "finally" clause. --- .../main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java index c80d03db..ad37f124 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java @@ -250,8 +250,8 @@ public ResultSet execQuery(String query) { if (logger.isDebugEnabled()) { logger.debug(String.format("execQuery: %s", query)); } - try { - return getConn().createStatement().executeQuery(query); + try ( Connection conn = getConn() ) { + return conn.createStatement().executeQuery(query); } catch (SQLException e) { if (logger.isDebugEnabled()) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); @@ -456,6 +456,7 @@ public List> getOrganizations(String orgId) { } catch (SQLException e) { logger.warn(String.format("%s", LogUtil.getStackTrace(e))); } finally { + statement.close(); closeConfig(); } From 0a91ba606ef90f55b35f5739737eed00fc4f0fb5 Mon Sep 17 00:00:00 2001 From: Hithesh Date: Thu, 12 Apr 2018 12:37:18 +0530 Subject: [PATCH 006/126] US571872 - MMS - Fix blocker issues found by Sonarqube - AllFlagsGet.java 576648 - Refactor this method to not always return the same value. --- .../java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java index 602519f8..d5077559 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java @@ -69,7 +69,7 @@ protected boolean clear() { } else if (path.equalsIgnoreCase( "skipSvgToPng" )) { return false; } - return false; + return true; } From 39b4b0f88d2a56d7f43a706c2c0c1b59d926c77f Mon Sep 17 00:00:00 2001 From: Ward Schweitzer Date: Tue, 15 May 2018 08:35:18 -0400 Subject: [PATCH 007/126] US635084: Formatting changes + added pg.secured property to mms.properties.example files --- mms-ent/docker/files/mms.properties.example | 1 + mms-ent/mms.properties.example | 1 + .../nasa/jpl/view_repo/db/PostgresPool.java | 22 +++++++++++-------- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/mms-ent/docker/files/mms.properties.example b/mms-ent/docker/files/mms.properties.example index 4aa4c799..c3ecb9c6 100644 --- a/mms-ent/docker/files/mms.properties.example +++ b/mms-ent/docker/files/mms.properties.example @@ -27,6 +27,7 @@ pg.pass= pg.conn.max=96 pg.limit.insert=5000 pg.limit.select=1000 +pg.secured=false #Elasticsearch Settings elastic.host=http://localhost:9200 diff --git a/mms-ent/mms.properties.example b/mms-ent/mms.properties.example index 7d5302c6..d45f0a43 100644 --- a/mms-ent/mms.properties.example +++ b/mms-ent/mms.properties.example @@ -27,6 +27,7 @@ pg.pass=POSTGRESPASSWORD pg.conn.max=96 pg.limit.insert=5000 pg.limit.select=1000 +pg.secured=false #Elasticsearch Settings elastic.host=http://localhost:9200 diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java index afa5ac95..f0108f65 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java @@ -63,9 +63,10 @@ private PostgresPool(String host, String name) { this.bds.setRemoveAbandonedTimeout(1); this.bds.setLogAbandoned(true); this.bds.setRemoveAbandoned(true); - this.bds.setTimeBetweenEvictionRunsMillis(1000*60); - this.bds.setMinEvictableIdleTimeMillis(1000*60*5); - if(EmsConfig.get(PG_SEC).toLowerCase().equals("true")){ + this.bds.setTimeBetweenEvictionRunsMillis(1000 * 60); + this.bds.setMinEvictableIdleTimeMillis(1000 * 60 * 5); + + if(EmsConfig.get(PG_SEC).toLowerCase().equals("true")) { this.bds.setConnectionProperties("ssl=true"); } } @@ -113,7 +114,7 @@ private void goActive() { private void goIdle() { this.bds.setMaxIdle(MIN_IDLE_CONN); - if(this.bds.getNumActive() > 0){ + if(this.bds.getNumActive() > 0) { logger.warn("Database connection pool (" + getConnectString(host, name) + ") with active connections was instructed to go idle. Database may be overloaded"); @@ -162,8 +163,9 @@ private static Cache getActiveDatasetCache(String host){ .weigher((String key, PostgresPool pool) -> pool.getWeight()) .expireAfterAccess(5, TimeUnit.MINUTES) .removalListener((RemovalNotification v) -> { - if (v.getCause() != RemovalCause.REPLACED) + if (v.getCause() != RemovalCause.REPLACED) { v.getValue().goIdle(); + } }) .build(); activeDataSources.put(host, cache); @@ -173,8 +175,9 @@ private static Cache getActiveDatasetCache(String host){ public static IBasicDataSourceFactory getBasicDataSourceFactory() { - if(basicDataSourceFactory == null) + if(basicDataSourceFactory == null) { basicDataSourceFactory = () -> new BasicDataSource(); + } return basicDataSourceFactory; } @@ -182,13 +185,14 @@ public static void setBasicDataSourceFactory(IBasicDataSourceFactory basicDataSo PostgresPool.basicDataSourceFactory = basicDataSourceFactory; } - static void purgeDatabasePools(){ + static void purgeDatabasePools() { activeDataSources.clear(); dataSources.clear(); } - static void idleDatabasePools(){ - for(Cache cache : activeDataSources.values()) + static void idleDatabasePools() { + for(Cache cache : activeDataSources.values()) { cache.invalidateAll(); + } } } From 9310636d67c46c4f184ba0c1fd01e294b34ebd40 Mon Sep 17 00:00:00 2001 From: Ward Schweitzer Date: Tue, 15 May 2018 08:38:30 -0400 Subject: [PATCH 008/126] US635084: Formatting change --- .../src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java index f0108f65..bcc6d2ab 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java @@ -154,7 +154,7 @@ static void removeConnection(String host, String name) { getActiveDatasetCache(host).invalidate(connectString); } - private static Cache getActiveDatasetCache(String host){ + private static Cache getActiveDatasetCache(String host) { Cache cache = activeDataSources.get((host)); if(cache == null) { From 25331541a1fba1414d6a52ff3ade09d89f3ce37f Mon Sep 17 00:00:00 2001 From: Matthew B Scheetz Date: Fri, 25 May 2018 08:45:32 -0400 Subject: [PATCH 009/126] BUG690378 - 1.7 Tech Insertion - MMS 3.2.4 Generate PDF Email Issue --- .../java/gov/nasa/jpl/view_repo/webscripts/HostnameGet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HostnameGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HostnameGet.java index 9c52be21..a21bf360 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HostnameGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HostnameGet.java @@ -96,8 +96,8 @@ public String getAlfrescoProtocol(){ private String alfrescoUrl; public String getAlfrescoUrl(){ - if(alfrescoUrl==null || alfrescoUrl.isEmpty()){ - if(this.alfrescoHost.compareToIgnoreCase(LOCAL_HOST)==0 || this.alfrescoHost.compareToIgnoreCase(LOCAL_HOST_IP)==0){ + if(alfrescoUrl==null || alfrescoUrl.isEmpty() || alfrescoPort > 0) { + if(this.alfrescoHost.compareToIgnoreCase(LOCAL_HOST)==0 || this.alfrescoHost.compareToIgnoreCase(LOCAL_HOST_IP)==0){ alfrescoUrl = this.alfrescoProtocol + "://" + this.alfrescoHost + ":" + alfrescoPort; } else{ From eb6907de1c116e1b1e2601fcee1e00ca3b5cbe08 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 25 Jun 2018 18:23:37 -0700 Subject: [PATCH 010/126] Starting allinone Dockerfile --- mms-ent/docker/all-in-one/Dockerfile | 267 ++++++++++++++++++ .../docker/all-in-one/docker-entrypoint.sh | 186 ++++++++++++ mms-ent/docker/config/run.sh | 11 +- 3 files changed, 462 insertions(+), 2 deletions(-) create mode 100644 mms-ent/docker/all-in-one/Dockerfile create mode 100644 mms-ent/docker/all-in-one/docker-entrypoint.sh diff --git a/mms-ent/docker/all-in-one/Dockerfile b/mms-ent/docker/all-in-one/Dockerfile new file mode 100644 index 00000000..5f724abf --- /dev/null +++ b/mms-ent/docker/all-in-one/Dockerfile @@ -0,0 +1,267 @@ +FROM openjdk:8-jdk-alpine + +ENV BUILD_DEPS \ + bison \ + cabextract \ + ca-certificates \ + coreutils \ + curl \ + dpkg-dev dpkg \ + flex \ + gcc \ + ghc \ + gmp \ + gnupg \ + libc-dev \ + libedit-dev \ + libxml2-dev \ + libxslt-dev \ + libffi \ + linux-headers \ + make \ + musl-dev \ + openssl-dev \ + perl-utils \ + perl-ipc-run \ + tar \ + util-linux-dev \ + wget \ + zlib-dev + +ENV PERSIST_DEPS \ + bash \ + fontconfig \ + graphviz \ + imagemagick \ + msttcorefonts-installer \ + python \ + py2-pip \ + sed \ + su-exec \ + ttf-droid \ + ttf-droid-nonlatin \ + tzdata \ + unzip + +ENV EDGE_DEPS \ + cabal + +ENV LANG en_US.utf8 + +ENV USR_LOCAL /usr/local + +ENV ELASTICSEARCH_VERSION 5.5.2 +ENV ELASTICSEARCH_TARBALL "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ELASTICSEARCH_VERSION}.tar.gz" +ENV ELASTICSEARCH_TARBALL_ASC "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ELASTICSEARCH_VERSION}.tar.gz.asc" +ENV ELASTICSEARCH_TARBALL_SHA1 "91b3b3c823fafce54609ed5c9075d9cf50b2edff" + +ENV PG_MAJOR 9.4 +ENV PG_VERSION 9.4.18 +ENV PG_SHA256 428337f2b2f5e3ea21b8a44f88eb89c99a07a324559b99aebe777c9abdf4c4c0 + +ENV TOMCAT_MAJOR 7 +ENV TOMCAT_VERSION 7.0.88 +ENV TOMCAT_TGZ_URL "http://mirrors.sonic.net/apache/tomcat/tomcat-7/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz" +ENV TOMCAT_HOME $USR_LOCAL/tomcat + +ENV PLANTUML_VERSION 1.2017.18 +ENV PLANTUML_DOWNLOAD_URL https://sourceforge.net/projects/plantuml/files/plantuml.$PLANTUML_VERSION.jar/download + +ENV PANDOC_VERSION 1.19.2.4 +ENV PANDOC_DOWNLOAD_URL https://hackage.haskell.org/package/pandoc-$PANDOC_VERSION/pandoc-$PANDOC_VERSION.tar.gz +ENV PANDOC_HOME $USR_LOCAL/pandoc + +ENV ALF_DATA_DIR /mnt/alf_data +ENV CONFIG_DIR $USR_LOCAL/config +ENV FILES_DIR $USR_LOCAL/files + +ENV PGDATA /var/lib/postgresql/data + +ENV PATH $USR_LOCAL/bin:$TOMCAT_HOME/bin:$PANDOC_HOME/bin:$PATH + +# ---- Install Dependencies ---- +RUN apk upgrade --update \ + && apk add --no-cache --virtual .build-deps $BUILD_DEPS \ + && apk add --no-cache --virtual .persistent-deps $PERSIST_DEPS \ + && update-ms-fonts \ + && fc-cache -f \ + && curl -fsSL "$PLANTUML_DOWNLOAD_URL" -o /usr/local/plantuml.jar \ + && apk add --no-cache --virtual .edge-deps $EDGE_DEPS -X http://dl-cdn.alpinelinux.org/alpine/edge/community \ + && curl -fsSL "$PANDOC_DOWNLOAD_URL" | tar -xzf - \ + && ( cd pandoc-$PANDOC_VERSION && cabal update && cabal install --only-dependencies \ + && cabal configure --prefix=$PANDOC_HOME \ + && cabal build \ + && cabal copy \ + && cd .. ) \ + && rm -Rf pandoc-$PANDOC_VERSION/ /root/.cabal/ /root/.ghc/ /pandoc-build \ + && mkdir -p /var/docs + + +# ---- Postgres ---- + +RUN set -ex; \ + postgresHome="$(getent passwd postgres)"; \ + postgresHome="$(echo "$postgresHome" | cut -d: -f6)"; \ + [ "$postgresHome" = '/var/lib/postgresql' ]; \ + mkdir -p "$postgresHome"; \ + chown -R postgres:postgres "$postgresHome" + +RUN set -ex; \ + wget -O postgresql.tar.bz2 "https://ftp.postgresql.org/pub/source/v$PG_VERSION/postgresql-$PG_VERSION.tar.bz2" \ + && echo "$PG_SHA256 *postgresql.tar.bz2" | sha256sum -c - \ + && mkdir -p /usr/src/postgresql \ + && tar \ + --extract \ + --file postgresql.tar.bz2 \ + --directory /usr/src/postgresql \ + --strip-components 1 \ + && rm postgresql.tar.bz2 \ + \ + && cd /usr/src/postgresql \ + && awk '$1 == "#define" && $2 == "DEFAULT_PGSOCKET_DIR" && $3 == "\"/tmp\"" { $3 = "\"/var/run/postgresql\""; print; next } { print }' src/include/pg_config_manual.h > src/include/pg_config_manual.h.new \ + && grep '/var/run/postgresql' src/include/pg_config_manual.h.new \ + && mv src/include/pg_config_manual.h.new src/include/pg_config_manual.h \ + && gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \ + && wget -O config/config.guess 'https://git.savannah.gnu.org/cgit/config.git/plain/config.guess?id=7d3d27baf8107b630586c962c057e22149653deb' \ + && wget -O config/config.sub 'https://git.savannah.gnu.org/cgit/config.git/plain/config.sub?id=7d3d27baf8107b630586c962c057e22149653deb' \ + && ./configure \ + --build="$gnuArch" \ + --enable-integer-datetimes \ + --enable-thread-safety \ + --enable-tap-tests \ + --disable-rpath \ + --with-uuid=e2fs \ + --with-gnu-ld \ + --with-pgport=5432 \ + --with-system-tzdata=/usr/share/zoneinfo \ + --prefix=/usr/local \ + --with-includes=/usr/local/include \ + --with-libraries=/usr/local/lib \ + \ + --with-openssl \ + --with-libxml \ + --with-libxslt \ + && make -j "$(nproc)" world \ + && make install-world \ + && make -C contrib install \ + \ + && runDeps="$( \ + scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/share/postgresql \ + | tr ',' '\n' \ + | sort -u \ + | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ + )" \ + && apk add --no-cache --virtual .persistent-deps \ + $runDeps \ + && cd / \ + && rm -rf \ + /usr/src/postgresql \ + /usr/local/share/doc \ + /usr/local/share/man \ + && find /usr/local -name '*.a' -delete + +RUN sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/local/share/postgresql/postgresql.conf.sample +RUN mkdir -p /var/run/postgresql && chown -R postgres:postgres /var/run/postgresql && chmod 2777 /var/run/postgresql +RUN mkdir -p "$PGDATA" && chown -R postgres:postgres "$PGDATA" && chmod 777 "$PGDATA" + + +# ---- Elasticsearch ---- + +RUN addgroup -S elasticsearch && adduser -S -G elasticsearch elasticsearch +WORKDIR /usr/share/elasticsearch + +RUN set -ex; \ + wget -O elasticsearch.tar.gz "$ELASTICSEARCH_TARBALL" \ + && echo "$ELASTICSEARCH_TARBALL_SHA1 *elasticsearch.tar.gz" | sha1sum -c - \ + && wget -O elasticsearch.tar.gz.asc "$ELASTICSEARCH_TARBALL_ASC" \ + && export GNUPGHOME="$(mktemp -d)" \ + && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \ + && gpg --batch --verify elasticsearch.tar.gz.asc elasticsearch.tar.gz \ + && rm -rf "$GNUPGHOME" elasticsearch.tar.gz.asc \ + && tar -xf elasticsearch.tar.gz --strip-components=1 \ + && rm elasticsearch.tar.gz \ + && mkdir -p ./plugins; \ + for path in \ + ./data \ + ./logs \ + ./config \ + ./config/scripts \ + ; do \ + mkdir -p "$path"; \ + chown -R elasticsearch:elasticsearch "$path"; \ + done; \ + export ES_JAVA_OPTS='-Xms32m -Xmx32m'; + +COPY config ./config + +# ---- Tomcat ---- +RUN curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \ + && ls -la \ + && echo "tar -xzf tomcat.tar.gz" \ + && tar -xzf tomcat.tar.gz \ + && rm tomcat.tar.gz* \ + && echo "mv apache-tomcat-${TOMCAT_VERSION} tomcat" \ + && mv apache-tomcat-${TOMCAT_VERSION} ${TOMCAT_HOME} + + +# ---- Alfresco ---- +WORKDIR /usr/local +COPY config ${CONFIG_DIR} +COPY config/config_alfresco.sh . +COPY config/run.sh ${TOMCAT_HOME}/bin/run.sh +COPY config/set_properties.sh ${TOMCAT_HOME}/bin/set_properties.sh +COPY all-in-one/docker-entrypoint.sh /usr/local/bin/ + + +# Download the community zip files +RUN wget --no-check-certificate -S "https://download.alfresco.com/release/community/201605-build-00010/alfresco-community-distribution-201605.zip" \ + && chmod +x ${USR_LOCAL}/bin/docker-entrypoint.sh \ + && chmod +x config_alfresco.sh \ + && chmod +x ${TOMCAT_HOME}/bin/run.sh \ + && chmod +x ${TOMCAT_HOME}/bin/set_properties.sh \ + && ./config_alfresco.sh + +RUN cp ${CONFIG_DIR}/alfresco-global.properties ${TOMCAT_HOME}/shared/classes/alfresco-global.properties \ + && cp ${CONFIG_DIR}/catalina.properties ${TOMCAT_HOME}/conf/catalina.properties \ + && cp ${CONFIG_DIR}/solr4-context.xml ${TOMCAT_HOME}/conf/Catalina/localhost/solr4.xml \ + && cp ${CONFIG_DIR}/tomcat-server.xml ${TOMCAT_HOME}/conf/server.xml \ + && cp ${CONFIG_DIR}/tomcat-users.xml ${TOMCAT_HOME}/conf/tomcat-users.xml \ + && cp ${CONFIG_DIR}/archive-solrcore.properties ${TOMCAT_HOME}/solr4/archive-SpacesStore/conf/solrcore.properties \ + && cp ${CONFIG_DIR}/workspace-solrcore.properties ${TOMCAT_HOME}/solr4/workspace-SpacesStore/conf/solrcore.properties + + +# ---- MMS ----- +COPY files ${FILES_DIR} +RUN java -jar ${TOMCAT_HOME}/bin/alfresco-mmt.jar install ${FILES_DIR}/mms-amp*.amp ${TOMCAT_HOME}/webapps/alfresco.war -force \ + && java -jar ${TOMCAT_HOME}/bin/alfresco-mmt.jar install ${FILES_DIR}/mms-share-amp*.amp ${TOMCAT_HOME}/webapps/share.war -force \ + && cd ${TOMCAT_HOME}/webapps \ + && rm -rf alfresco share \ + && mkdir alfresco share \ + && cd alfresco \ + && jar xf ../alfresco.war \ + && cd ../share \ + && jar xf ../share.war \ + && mv ${FILES_DIR}/mms.properties.example ${TOMCAT_HOME}/shared/classes/mms.properties \ + && cp ${FILES_DIR}/web.xml ${TOMCAT_HOME}/webapps/alfresco/WEB-INF/web.xml \ + && rm -rf ${FILES_DIR} \ + && cd ${TOMCAT_HOME}/webapps \ + && rm *.bak + + +# Add tomcat user and config +RUN addgroup -S tomcat \ + && adduser -G tomcat -g "Tomcat User" -s /bin/ash -D tomcat \ + && mkdir -p ${ALF_DATA_DIR}/solr4 \ + && chown -R tomcat:tomcat ${TOMCAT_HOME} \ + && chown -R tomcat:tomcat ${ALF_DATA_DIR} + +RUN apk del .build-deps + +# Alfresco +EXPOSE 8080:8080 +# Postgres +EXPOSE 5432:5432 +# ElasticSearch +EXPOSE 9200:9200 + +ENTRYPOINT ["/usr/local/tomcat/bin/run.sh"] diff --git a/mms-ent/docker/all-in-one/docker-entrypoint.sh b/mms-ent/docker/all-in-one/docker-entrypoint.sh new file mode 100644 index 00000000..e8e128bd --- /dev/null +++ b/mms-ent/docker/all-in-one/docker-entrypoint.sh @@ -0,0 +1,186 @@ +#!/bin/bash +set -Eeo pipefail +# TODO swap to -Eeuo pipefail above (after handling all potentially-unset variables) + +# usage: file_env VAR [DEFAULT] +# ie: file_env 'XYZ_DB_PASSWORD' 'example' +# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of +# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) +file_env() { + local var="$1" + local fileVar="${var}_FILE" + local def="${2:-}" + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" + exit 1 + fi + local val="$def" + if [ "${!var:-}" ]; then + val="${!var}" + elif [ "${!fileVar:-}" ]; then + val="$(< "${!fileVar}")" + fi + export "$var"="$val" + unset "$fileVar" +} + +if [ "${1:0:1}" = '-' ]; then + set -- postgres "$@" + set -- elasticsearch "$@" +fi + +# allow the container to be started with `--user` +if [ "$1" = 'postgres' ] && [ "$(id -u)" = '0' ]; then + mkdir -p "$PGDATA" + chown -R postgres "$PGDATA" + chmod 700 "$PGDATA" + + mkdir -p /var/run/postgresql + chown -R postgres /var/run/postgresql + chmod 775 /var/run/postgresql + + # Create the transaction log directory before initdb is run (below) so the directory is owned by the correct user + if [ "$POSTGRES_INITDB_XLOGDIR" ]; then + mkdir -p "$POSTGRES_INITDB_XLOGDIR" + chown -R postgres "$POSTGRES_INITDB_XLOGDIR" + chmod 700 "$POSTGRES_INITDB_XLOGDIR" + fi + + exec su-exec /usr/local/bin/postgres "$BASH_SOURCE" "$@" +fi + +if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then + # Change the ownership of user-mutable directories to elasticsearch + for path in \ + /usr/share/elasticsearch/data \ + /usr/share/elasticsearch/logs \ + ; do + chown -R elasticsearch:elasticsearch "$path" + done + + set -- su-exec /usr/local/elasticsearch/bin/elasticsearch "$@" + #exec su-exec elasticsearch "$BASH_SOURCE" "$@" +fi + +if [ "$1" = 'postgres' ]; then + mkdir -p "$PGDATA" + chown -R "$(id -u)" "$PGDATA" 2>/dev/null || : + chmod 700 "$PGDATA" 2>/dev/null || : + + # look specifically for PG_VERSION, as it is expected in the DB dir + if [ ! -s "$PGDATA/PG_VERSION" ]; then + # "initdb" is particular about the current user existing in "/etc/passwd", so we use "nss_wrapper" to fake that if necessary + # see https://github.com/docker-library/postgres/pull/253, https://github.com/docker-library/postgres/issues/359, https://cwrap.org/nss_wrapper.html + if ! getent passwd "$(id -u)" &> /dev/null && [ -e /usr/lib/libnss_wrapper.so ]; then + export LD_PRELOAD='/usr/lib/libnss_wrapper.so' + export NSS_WRAPPER_PASSWD="$(mktemp)" + export NSS_WRAPPER_GROUP="$(mktemp)" + echo "postgres:x:$(id -u):$(id -g):PostgreSQL:$PGDATA:/bin/false" > "$NSS_WRAPPER_PASSWD" + echo "postgres:x:$(id -g):" > "$NSS_WRAPPER_GROUP" + fi + + file_env 'POSTGRES_INITDB_ARGS' + if [ "$POSTGRES_INITDB_XLOGDIR" ]; then + export POSTGRES_INITDB_ARGS="$POSTGRES_INITDB_ARGS --xlogdir $POSTGRES_INITDB_XLOGDIR" + fi + eval "initdb --username=postgres $POSTGRES_INITDB_ARGS" + + # unset/cleanup "nss_wrapper" bits + if [ "${LD_PRELOAD:-}" = '/usr/lib/libnss_wrapper.so' ]; then + rm -f "$NSS_WRAPPER_PASSWD" "$NSS_WRAPPER_GROUP" + unset LD_PRELOAD NSS_WRAPPER_PASSWD NSS_WRAPPER_GROUP + fi + + # check password first so we can output the warning before postgres + # messes it up + file_env 'POSTGRES_PASSWORD' + if [ "$POSTGRES_PASSWORD" ]; then + pass="PASSWORD '$POSTGRES_PASSWORD'" + authMethod=md5 + else + # The - option suppresses leading tabs but *not* spaces. :) + cat >&2 <<-'EOWARN' + **************************************************** + WARNING: No password has been set for the database. + This will allow anyone with access to the + Postgres port to access your database. In + Docker's default configuration, this is + effectively any other container on the same + system. + + Use "-e POSTGRES_PASSWORD=password" to set + it in "docker run". + **************************************************** + EOWARN + + pass= + authMethod=trust + fi + + { + echo + echo "host all all all $authMethod" + } >> "$PGDATA/pg_hba.conf" + + # internal start of server in order to allow set-up using psql-client + # does not listen on external TCP/IP and waits until start finishes + PGUSER="${PGUSER:-postgres}" \ + pg_ctl -D "$PGDATA" \ + -o "-c listen_addresses=''" \ + -w start + + file_env 'POSTGRES_USER' 'postgres' + file_env 'POSTGRES_DB' "$POSTGRES_USER" + + psql=( psql -v ON_ERROR_STOP=1 ) + + if [ "$POSTGRES_DB" != 'postgres' ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$POSTGRES_DB" ; + EOSQL + echo + fi + + if [ "$POSTGRES_USER" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$POSTGRES_USER" WITH SUPERUSER $pass ; + EOSQL + echo + + psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + + echo + for f in /docker-entrypoint-initdb.d/*; do + case "$f" in + *.sh) + # https://github.com/docker-library/postgres/issues/450#issuecomment-393167936 + # https://github.com/docker-library/postgres/pull/452 + if [ -x "$f" ]; then + echo "$0: running $f" + "$f" + else + echo "$0: sourcing $f" + . "$f" + fi + ;; + *.sql) echo "$0: running $f"; "${psql[@]}" -f "$f"; echo ;; + *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;; + *) echo "$0: ignoring $f" ;; + esac + echo + done + + PGUSER="${PGUSER:-postgres}" \ + pg_ctl -D "$PGDATA" -m fast -w stop + + echo + echo 'PostgreSQL init process complete; ready for start up.' + echo + fi +fi + +exec "$@" diff --git a/mms-ent/docker/config/run.sh b/mms-ent/docker/config/run.sh index f700b9d4..15722aa3 100644 --- a/mms-ent/docker/config/run.sh +++ b/mms-ent/docker/config/run.sh @@ -2,5 +2,12 @@ ${TOMCAT_HOME}/bin/set_properties.sh -# Start Alfresco -su - tomcat -c "${TOMCAT_HOME}/bin/catalina.sh run" +# Check if this is an all-in-one image +if [ -f "/usr/local/bin/docker-entrypoint.sh" ];then + /usr/local/bin/docker-entrypoint.sh elasticsearch && + POSTGRES_USER=$PG_DB_USER POSTGRES_PASSWORD=$PG_DB_PASS /usr/local/bin/docker-entrypoint.sh postgres && + su - tomcat -c "${TOMCAT_HOME}/bin/catalina.sh run"; +else + #Just start tomcat + su - tomcat -c "${TOMCAT_HOME}/bin/catalina.sh run"; +fi From f555c042f602b2ff425b20d6ae78b3a0c3230736 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 27 Jun 2018 10:26:06 -0700 Subject: [PATCH 011/126] Add accurate error message --- .../gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java index 9db6e4b1..e9c01a00 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java @@ -90,8 +90,8 @@ protected Map executeImpl(WebScriptRequest req, Status status) } catch (AuthenticationException e) { //status.setRedirect(true); status.setCode(HttpServletResponse.SC_NOT_FOUND); - status.setMessage("Ticket not found"); - result.addProperty("message", "Ticket not found"); + status.setMessage(e.getMsgId()); + result.addProperty("message", e.getMsgId()); } model.put(Sjm.RES, result.toString() ); From 7622d7ca014b7477022c8d30c10a6c60868be448 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 27 Jun 2018 14:10:08 -0700 Subject: [PATCH 012/126] Removing NodeUtil --- .../context/mms-init-service-context.xml | 2 +- .../mms-amp/context/mms-service-context.xml | 6 +- .../jpl/view_repo/actions/ActionUtil.java | 19 +- .../view_repo/connections/JmsConnection.java | 7 +- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 107 +++++ .../jpl/view_repo/util/EmsScriptNode.java | 261 ++++++++--- .../gov/nasa/jpl/view_repo/util/NodeUtil.java | 425 ------------------ .../webscripts/AbstractJavaWebScript.java | 13 +- .../jpl/view_repo/webscripts/AllFlagsGet.java | 6 +- .../view_repo/webscripts/ArtifactPost.java | 2 +- .../webscripts/HtmlConverterPost.java | 3 +- .../jpl/view_repo/webscripts/MmsVersion.java | 2 +- .../webscripts/util/LoginTicket.java | 2 +- .../webscripts/util/ModuleInfoGet.java | 2 - .../webscripts/util/SitePermission.java | 4 +- 15 files changed, 337 insertions(+), 524 deletions(-) delete mode 100644 mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/NodeUtil.java diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-init-service-context.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-init-service-context.xml index cd3a45ec..66690729 100755 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-init-service-context.xml +++ b/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-init-service-context.xml @@ -43,7 +43,7 @@ - + diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml index 5c03a0bb..48ab3fba 100755 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml +++ b/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml @@ -192,14 +192,14 @@ - + - + - + diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java index b8c3cfc4..a9882963 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java @@ -29,27 +29,12 @@ package gov.nasa.jpl.view_repo.actions; -import gov.nasa.jpl.mbee.util.Utils; -import gov.nasa.jpl.view_repo.util.Acm; +import gov.nasa.jpl.view_repo.util.EmsNodeUtil; import gov.nasa.jpl.view_repo.util.EmsScriptNode; -import gov.nasa.jpl.view_repo.util.NodeUtil; -import gov.nasa.jpl.view_repo.util.EmsScriptNode; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.Date; - -import javax.servlet.http.HttpServletResponse; -import org.alfresco.model.ContentModel; import org.alfresco.repo.action.executer.MailActionExecuter; -import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.action.Action; -import org.alfresco.service.cmr.repository.ContentData; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.springframework.extensions.webscripts.Status; /** * Static class of Action utilities for saving log, sending email, etc. @@ -75,7 +60,7 @@ public static void sendEmailToModifier(EmsScriptNode node, String msg, String su EmsScriptNode user = new EmsScriptNode(services.getPersonService().getPerson(username), services, new StringBuffer()); String recipient = (String) user.getProperty("cm:email"); - String sender = NodeUtil.getHostname() + "@jpl.nasa.gov"; + String sender = EmsNodeUtil.getHostname() + "@jpl.nasa.gov"; sendEmailTo(sender, recipient, msg, subject, services); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java index 9244f70d..067ff1ab 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/connections/JmsConnection.java @@ -1,5 +1,6 @@ package gov.nasa.jpl.view_repo.connections; +import gov.nasa.jpl.view_repo.util.EmsNodeUtil; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; @@ -18,10 +19,8 @@ import org.apache.log4j.Logger; -import gov.nasa.jpl.mbee.util.Utils; import gov.nasa.jpl.view_repo.util.CommitUtil; import gov.nasa.jpl.view_repo.util.EmsConfig; -import gov.nasa.jpl.view_repo.util.NodeUtil; import com.google.gson.JsonObject; import com.google.gson.JsonArray; @@ -195,7 +194,7 @@ public boolean publishMessage(String msg, String eventType) { message.setStringProperty("projectId", projectId); } message.setLongProperty("MessageID", sequenceId++); - message.setStringProperty("MessageSource", NodeUtil.getHostname()); + message.setStringProperty("MessageSource", EmsNodeUtil.getHostname()); message.setStringProperty("MessageRecipient", "TMS"); message.setStringProperty("MessageType", eventType.toUpperCase()); @@ -227,7 +226,7 @@ public boolean publishMessage(String msg, String eventType) { for (String eventType : getConnectionMap().keySet()) { ConnectionInfo ci = getConnectionMap().get(eventType); if (ci.uri.contains("localhost")) { - ci.uri = ci.uri.replace("localhost", NodeUtil.getHostname()); + ci.uri = ci.uri.replace("localhost", EmsNodeUtil.getHostname()); getConnectionMap().put(eventType, ci); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index d389d821..b49f86b5 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -13,6 +13,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -24,6 +25,13 @@ import java.util.TimeZone; import gov.nasa.jpl.view_repo.db.*; +import org.alfresco.repo.service.ServiceDescriptorRegistry; +import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.module.ModuleDependency; +import org.alfresco.service.cmr.module.ModuleDetails; +import org.alfresco.service.cmr.module.ModuleService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; import org.alfresco.util.TempFileProvider; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; @@ -1899,4 +1907,103 @@ public static Path saveToFilesystem(String filename, InputStream content) throws throw new Throwable("Failed to save file to filesystem. " + ex.getMessage()); } } + + public static String getHostname() { + ServiceDescriptorRegistry sdr = new ServiceDescriptorRegistry(); + return sdr.getSysAdminParams().getAlfrescoHost(); + } + + /** + * getModuleService Retrieves the ModuleService of the ServiceRegistry passed in + * + * @param services ServiceRegistry object that contains the desired ModuleService + * @return ModuleService + */ + public static ModuleService getModuleService(ServiceRegistry services) { + if (services == null) { + return null; + } + // Takes the ServiceRegistry and calls the ModuleService super method + // getService(Creates an Alfresco QName using the namespace + // service and passes in the default URI + return (ModuleService) services.getService(QName.createQName(NamespaceService.ALFRESCO_URI, "ModuleService")); + } + + /** + * getServiceModules + * + * Returns a JSONArray of Module Details from the Service Modules + * + * @param service the service containing modules to be returned + * @return JSONArray of ModuleDetails within the ModuleService object + */ + public static JsonArray getServiceModulesJson(ModuleService service) { + + JsonArray jsonArray = new JsonArray(); + List modules = service.getAllModules(); + for (ModuleDetails detail : modules) { + JsonObject jsonModule = moduleDetailsToJson(detail); + jsonArray.add(jsonModule); + } + return jsonArray; + } + + /** + * moduleDetailsToJson + * + * Takes a module of type ModuleDetails and retrieves all off the module's members and puts them + * into a newly instantiated JSONObject. + * + * JSONObject will have the details : title, version, aliases, class, dependencies, editions id + * and properties + * + * @param module A single module of type ModuleDetails + * @return JSONObject which contains all the details of that module + */ + public static JsonObject moduleDetailsToJson(ModuleDetails module) { + JsonObject jsonModule = new JsonObject(); + jsonModule.addProperty("mmsTitle", module.getTitle()); + jsonModule.addProperty("mmsVersion", module.getModuleVersionNumber().toString()); + JsonUtil.addStringList(jsonModule, "mmsAliases", module.getAliases()); + jsonModule.addProperty("mmsClass", module.getClass().toString()); + JsonArray depArray = new JsonArray(); + for (ModuleDependency depend: module.getDependencies()) + depArray.add(depend.toString()); + jsonModule.add("mmsDependencies", depArray); + JsonUtil.addStringList(jsonModule, "mmsEditions", module.getEditions()); + jsonModule.addProperty("mmsId", module.getId()); + JsonObject propObj = new JsonObject(); + Enumeration enumerator = module.getProperties().propertyNames(); + while (enumerator.hasMoreElements()) { + String key = (String)enumerator.nextElement(); + propObj.addProperty(key, module.getProperties().getProperty(key)); + } + jsonModule.add("mmsProperties", propObj); + return jsonModule; + } + + /** + * getMMSversion + * + * Gets the version number of a module, returns a JSONObject which calls on getString with + * 'version' as an argument. This will return a String representing the version of the + * mms. + * + * @return Version number of the MMS as type String + */ + public static String getMMSversion(ServiceRegistry services) { + ModuleService service = getModuleService(services); + JsonArray moduleDetails = getServiceModulesJson(service); + String mmsVersion = "NA"; + for (int i = 0; i < moduleDetails.size(); i++) { + JsonObject o = moduleDetails.get(i).getAsJsonObject(); + if (o.get("mmsId").getAsString().equalsIgnoreCase("mms-amp")) { + mmsVersion = o.get("mmsVersion").getAsString(); + } + } + + // Remove appended tags from version + int endIndex = mmsVersion.indexOf('-'); + return endIndex > -1 ? mmsVersion.substring(0, endIndex) : mmsVersion; + } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java index 608a2288..8a5d7567 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java @@ -26,20 +26,31 @@ package gov.nasa.jpl.view_repo.util; +import java.io.File; import java.io.Serializable; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpServletResponse; import org.alfresco.model.ContentModel; import org.alfresco.repo.jscript.ScriptNode; import org.alfresco.repo.jscript.ScriptVersion; +import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.ChildAssociationRef; +import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.security.AuthorityService; +import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.version.Version; @@ -64,7 +75,10 @@ public class EmsScriptNode extends ScriptNode { static Logger logger = Logger.getLogger(ScriptNode.class); - public boolean renamed = false; + public static boolean skipSvgToPng = false; + + public static Repository repository = null; + public static ServiceRegistry services = null; // provide logging capability of what is done private StringBuffer response = null; @@ -72,12 +86,6 @@ public class EmsScriptNode extends ScriptNode { // provide status as necessary private Status status = null; - /** - * whether to use the foundational Alfresco Java API or ScriptNode class that uses the - * JavaScript API - */ - public boolean useFoundationalApi = true; // TODO this will be removed - protected EmsScriptNode workspace = null; /** @@ -93,14 +101,28 @@ public class EmsScriptNode extends ScriptNode { public EmsScriptNode(NodeRef nodeRef, ServiceRegistry services, StringBuffer response, Status status) { this(nodeRef, services); + EmsScriptNode.services = services; setStatus(status); } public EmsScriptNode(NodeRef nodeRef, ServiceRegistry services, StringBuffer response) { this(nodeRef, services); + EmsScriptNode.services = services; setResponse(response); } + public static Repository getRepository() { + return repository; + } + + public static void setRepository(Repository repositoryHelper) { + EmsScriptNode.repository = repositoryHelper; + } + + public static void setServices(ServiceRegistry services) { + EmsScriptNode.services = services; + } + /** * Create a version of this document. Note: this will add the cm:versionable aspect. * @@ -220,31 +242,25 @@ public boolean createOrUpdateProperty(String acmType, T EmsScriptNode result = null; - if (!useFoundationalApi) { - ScriptNode scriptNode = super.createNode(name, type); - result = new EmsScriptNode(scriptNode.getNodeRef(), services, response); - } else { - Map props = new HashMap<>(1, 1.0f); - props.put(ContentModel.PROP_NAME, name); - - QName typeQName = createQName(type); - if (typeQName != null) { - try { - ChildAssociationRef assoc = services.getNodeService() - .createNode(nodeRef, ContentModel.ASSOC_CONTAINS, - QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName(name)), - createQName(type), props); - result = new EmsScriptNode(assoc.getChildRef(), services, response); - } catch (Exception e) { - logger.error( - "Got exception in " + "createNode(name=" + name + ", type=" + type + ") for EmsScriptNode(" - + this + ") calling createNode(nodeRef=" + nodeRef + ", . . .)"); - e.printStackTrace(); - } + Map props = new HashMap<>(1, 1.0f); + props.put(ContentModel.PROP_NAME, name); - } else { - log("Could not find type " + type); + QName typeQName = createQName(type); + if (typeQName != null) { + try { + ChildAssociationRef assoc = services.getNodeService().createNode(nodeRef, ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName(name)), + createQName(type), props); + result = new EmsScriptNode(assoc.getChildRef(), services, response); + } catch (Exception e) { + logger.error( + "Got exception in " + "createNode(name=" + name + ", type=" + type + ") for EmsScriptNode(" + this + + ") calling createNode(nodeRef=" + nodeRef + ", . . .)"); + e.printStackTrace(); } + + } else { + log("Could not find type " + type); } return result; @@ -299,7 +315,34 @@ public Object getProperty(String acmType, boolean cacheOkay) { } private Object getPropertyImpl(String acmType, boolean cacheOkay) { - return NodeUtil.getNodeProperty(this, acmType, getServices(), useFoundationalApi, cacheOkay); + NodeRef nodeRef = this.getNodeRef(); + if (nodeRef == null || acmType == null) { + return null; + } + + if (acmType.isEmpty()) { + if (logger.isTraceEnabled()) { + logger.trace( + "getNodeProperty(" + nodeRef + ", " + acmType + ", cacheOkay=" + cacheOkay + ") = null. No Key!"); + } + return null; + } + QName qName = createQName(acmType, services); + Object result; + if (services == null) { + services = getServices(); + } + result = services.getNodeService().getProperty(nodeRef, qName); + if (logger.isTraceEnabled()) { + logger.trace( + "^ cache miss! getNodeProperty(" + nodeRef + ", " + acmType + ", cacheOkay=" + cacheOkay + ") = " + + result); + } + if (logger.isTraceEnabled()) { + logger.trace("getNodeProperty(" + nodeRef + ", " + acmType + ", cacheOkay=" + cacheOkay + ") = " + result); + } + return result; + } /** @@ -308,17 +351,12 @@ private Object getPropertyImpl(String acmType, boolean cacheOkay) { * @return */ @Override public Map getProperties() { - - if (useFoundationalApi) { - Map result = new HashMap<>(); - Map map = services.getNodeService().getProperties(nodeRef); - for (Map.Entry entry: map.entrySet()) { - result.put(entry.getKey().toString(), entry.getValue()); - } - return result; - } else { - return super.getProperties(); + Map result = new HashMap<>(); + Map map = services.getNodeService().getProperties(nodeRef); + for (Map.Entry entry : map.entrySet()) { + result.put(entry.getKey().toString(), entry.getValue()); } + return result; } public StringBuffer getResponse() { @@ -354,16 +392,11 @@ public boolean setProperty(String acmType, T value, boo if (logger.isDebugEnabled()) logger.debug("setProperty(acmType=" + acmType + ", value=" + value + ")"); boolean success = true; - if (useFoundationalApi) { - try { - services.getNodeService().setProperty(nodeRef, createQName(acmType), value); - } catch (Exception e) { - // This should never happen! - success = false; - } - } else { - getProperties().put(acmType, value); - save(); + try { + services.getNodeService().setProperty(nodeRef, createQName(acmType), value); + } catch (Exception e) { + // This should never happen! + success = false; } return success; } @@ -534,7 +567,7 @@ public boolean scriptNodeExists() { return super.exists(); } - public ServiceRegistry getServices() { + public static ServiceRegistry getServices() { return services; } @@ -573,7 +606,6 @@ public static EmsScriptNode getSiteNode(String sysmlid) { if (changeUser) { AuthenticationUtil.setRunAsUser(ADMIN_USER_NAME); } - ServiceRegistry services = NodeUtil.getServiceRegistry(); SiteInfo si = services.getSiteService().getSite(sysmlid); if (si != null) { EmsScriptNode site = new EmsScriptNode(si.getNodeRef(), services, null); @@ -595,4 +627,127 @@ public void delete() { } } + /** + * Returns a list of all the groups the passed user belongs to. Note, there is no java interface + * for this, so this code is based on what the javascript interface does. + * + * See: https://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root + * /projects/repository/source/java/org/alfresco/repo/jscript/People.java + * + * @param user + * @return + */ + public static List getUserGroups(String user) { + + List authorityNames = new ArrayList<>(); + + AuthorityService aService = getServices().getAuthorityService(); + Set authorities = aService.getContainingAuthoritiesInZone(AuthorityType.GROUP, user, null, null, 1000); + for (String authority : authorities) { + NodeRef group = aService.getAuthorityNodeRef(authority); + if (group != null) { + authorityNames.add(authority); + } + } + + return authorityNames; + } + + /** + * Helper to create a QName from either a fully qualified or short-name QName string + *

+ * + * @param s Fully qualified or short-name QName string + * @param services ServiceRegistry for getting the service to resolve the name space + * @return QName + */ + public static QName createQName(String s, ServiceRegistry services) { + if (s == null) + return null; + QName qname; + if (s.contains("{")) { + qname = QName.createQName(s); + } else { + qname = QName.createQName(s, services.getNamespaceService()); + } + return qname; + } + + public static EmsScriptNode updateOrCreateArtifact(String artifactId, Path filePath, String fileType, String orgId, String projectId, String refId) { + + EmsScriptNode artifactNode; + String finalType = null; + File content = filePath.toFile(); + + try { + finalType = Files.probeContentType(filePath); + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug("updateOrCreateArtifact: ", e); + } + } + + if (finalType == null) { + // Fallback if getting content type fails + if (fileType != null) { + finalType = fileType; + } else { + logger.error("Could not determine type of artifact: " + filePath.getFileName().toString()); + return null; + } + } + + EmsScriptNode targetSiteNode = EmsScriptNode.getSiteNode(orgId); + + // find site; it must exist! + if (targetSiteNode == null || !targetSiteNode.exists()) { + logger.error("Can't find node for site: " + orgId + "!"); + return null; + } + + // find or create subfolder + EmsScriptNode subfolder = targetSiteNode.childByNamePath("/" + projectId + "/refs/" + refId); + if (subfolder == null || !subfolder.exists()) { + return null; + } + + // find or create node: + artifactNode = subfolder.childByNamePath("/" + artifactId); + // Node wasnt found, so create one: + if (artifactNode == null) { + artifactNode = subfolder.createNode(artifactId, "cm:content"); + } + + if (artifactNode == null || !artifactNode.exists()) { + logger.error("Failed to create new PNG artifact " + artifactId + "!"); + return null; + } + + if (!artifactNode.hasAspect("cm:versionable")) { + artifactNode.addAspect("cm:versionable"); + } + if (!artifactNode.hasAspect("cm:indexControl")) { + artifactNode.addAspect("cm:indexControl"); + } + + artifactNode.createOrUpdateProperty(Acm.CM_TITLE, artifactId); + artifactNode.createOrUpdateProperty("cm:isIndexed", true); + artifactNode.createOrUpdateProperty("cm:isContentIndexed", false); + + if (logger.isDebugEnabled()) { + logger.debug("Creating artifact with indexing: " + artifactNode.getProperty("cm:isIndexed")); + } + + ContentWriter writer = + services.getContentService().getWriter(artifactNode.getNodeRef(), ContentModel.PROP_CONTENT, true); + writer.putContent(content); + + ContentData contentData = writer.getContentData(); + contentData = ContentData.setMimetype(contentData, finalType); + contentData = ContentData.setEncoding(contentData, "UTF-8"); + services.getNodeService().setProperty(artifactNode.getNodeRef(), ContentModel.PROP_CONTENT, contentData); + + return artifactNode; + } + } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/NodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/NodeUtil.java deleted file mode 100644 index a891e260..00000000 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/NodeUtil.java +++ /dev/null @@ -1,425 +0,0 @@ -package gov.nasa.jpl.view_repo.util; - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.transaction.UserTransaction; - -import org.alfresco.model.ContentModel; -import org.alfresco.repo.jscript.ScriptNode; -import org.alfresco.repo.model.Repository; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.service.ServiceRegistry; -import org.alfresco.service.cmr.module.ModuleDependency; -import org.alfresco.service.cmr.module.ModuleDetails; -import org.alfresco.service.cmr.module.ModuleService; -import org.alfresco.service.cmr.repository.ContentData; -import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.security.AuthorityService; -import org.alfresco.service.cmr.security.AuthorityType; -import org.alfresco.service.cmr.security.PersonService; -import org.alfresco.service.namespace.NamespaceService; -import org.alfresco.service.namespace.QName; -import org.apache.log4j.Logger; - -import com.google.gson.JsonObject; -import com.google.gson.JsonArray; - -public class NodeUtil { - - static Logger logger = Logger.getLogger(NodeUtil.class); - - /* static flags and constants */ - - protected static Map transactionMap = - Collections.synchronizedMap(new LinkedHashMap()); - - public static UserTransaction getTransaction() { - return transactionMap.get(Thread.currentThread().getId()); - } - - public static boolean skipSvgToPng = false; - - public static ServiceRegistry services = null; - public static Repository repository = null; - - public static Repository getRepository() { - return repository; - } - - public static void setRepository(Repository repositoryHelper) { - NodeUtil.repository = repositoryHelper; - } - - public static ServiceRegistry getServices() { - return getServiceRegistry(); - } - - public static void setServices(ServiceRegistry services) { - NodeUtil.services = services; - } - - public static ServiceRegistry getServiceRegistry() { - return services; - } - - /** - * Given a long-form QName, this method uses the namespace service to create a short-form QName - * string. - *

- * Copied from {@link ScriptNode#getShortQName(QName)}. - * - * @param longQName - * @return the short form of the QName string, e.g. "cm:content" - */ - public static String getShortQName(QName longQName) { - return longQName.toPrefixString(getServices().getNamespaceService()); - } - - /** - * Helper to create a QName from either a fully qualified or short-name QName string - *

- * - * @param s Fully qualified or short-name QName string - * @param services ServiceRegistry for getting the service to resolve the name space - * @return QName - */ - public static QName createQName(String s, ServiceRegistry services) { - if (s == null) - return null; - QName qname; - if (s.indexOf("{") != -1) { - qname = QName.createQName(s); - } else { - qname = QName.createQName(s, getServices().getNamespaceService()); - } - return qname; - } - - - public static EmsScriptNode getCompanyHome(ServiceRegistry services) { - EmsScriptNode companyHome = null; - if (services == null) - services = getServiceRegistry(); - if (services == null || services.getNodeLocatorService() == null) { - logger.error("getCompanyHome() failed, no services or no nodeLocatorService: " + services); - } - NodeRef companyHomeNodeRef = - services != null ? services.getNodeLocatorService().getNode("companyhome", null, null) : null; - if (companyHomeNodeRef != null) { - companyHome = new EmsScriptNode(companyHomeNodeRef, services); - } - return companyHome; - } - - public static Object getNodeProperty(ScriptNode node, Object o, ServiceRegistry services, - boolean useFoundationalApi, boolean cacheOkay) { - return getNodeProperty(node.getNodeRef(), o, services, useFoundationalApi, cacheOkay); - } - - /** - * Gets a specified property of a specified node. Don't use the cache (cacheOkay should be - * false) for alfresco-managed properties like "modified" and "modifier." Handling - * alfresco-managed properties here might require a string compare that may be expensive. Thus, - * it is the caller's responsibility to make sure the cache is not used for these. - * - * @param node - * @param key the name of the property, e.g., "cm:name" - * @param services - * @param cacheOkay whether to look in the cache and cache a new value, assuming the cache is - * turned on. - * @return - */ - public static Object getNodeProperty(NodeRef node, Object key, ServiceRegistry services, boolean useFoundationalApi, - boolean cacheOkay) { - if (node == null || key == null) - return null; - - boolean oIsString = key instanceof String; - String keyStr = oIsString ? (String) key : NodeUtil.getShortQName((QName) key); - if (keyStr.isEmpty()) { - if (logger.isTraceEnabled()) - logger - .trace("getNodeProperty(" + node + ", " + key + ", cacheOkay=" + cacheOkay + ") = null. No Key!"); - return null; - } - QName qName = oIsString ? NodeUtil.createQName(keyStr, services) : (QName) key; - Object result; - if (useFoundationalApi) { - if (services == null) - services = NodeUtil.getServices(); - result = services.getNodeService().getProperty(node, qName); - if (logger.isTraceEnabled()) - logger.trace("^ cache miss! getNodeProperty(" + node + ", " + key + ", cacheOkay=" + cacheOkay + ") = " - + result); - } else { - ScriptNode sNode = new ScriptNode(node, services); - result = sNode.getProperties().get(keyStr); - } - if (logger.isTraceEnabled()) - logger.trace("getNodeProperty(" + node + ", " + key + ", cacheOkay=" + cacheOkay + ") = " + result); - return result; - } - - public static boolean exists(EmsScriptNode node) { - return exists(node, false); - } - - public static boolean exists(EmsScriptNode node, boolean includeDeleted) { - if (node == null) - return false; - return node.exists(includeDeleted); - } - - public static boolean exists(NodeRef ref) { - return exists(ref, false); - } - - public static boolean exists(NodeRef ref, boolean includeDeleted) { - if (ref == null) - return false; - EmsScriptNode node = new EmsScriptNode(ref, getServices()); - return node.exists(includeDeleted); - } - - public static String getUserName() { - return AuthenticationUtil.getRunAsUser(); - } - - public static EmsScriptNode getUserHomeFolder(String userName, boolean createIfNotFound) { - NodeRef homeFolderNode; - EmsScriptNode homeFolderScriptNode = null; - PersonService personService = getServices().getPersonService(); - NodeRef personNode = personService.getPerson(userName); - homeFolderNode = (NodeRef) getNodeProperty(personNode, ContentModel.PROP_HOMEFOLDER, getServices(), true, true); - if (homeFolderNode == null || !exists(homeFolderNode)) { - EmsScriptNode homes = getCompanyHome(getServices()); - if (homes != null) { - homes = homes.childByNamePath("/User Homes"); - } - if (createIfNotFound && homes != null && homes.exists()) { - homeFolderScriptNode = homes.createFolder(userName, null, null); - } else { - logger.error("Error! No user homes folder!"); - } - } - if (!exists(homeFolderScriptNode) && exists(homeFolderNode)) { - homeFolderScriptNode = new EmsScriptNode(homeFolderNode, getServices()); - } - return homeFolderScriptNode; - } - - /** - * Returns a list of all the groups the passed user belongs to. Note, there is no java interface - * for this, so this code is based on what the javascript interface does. - * - * See: https://svn.alfresco.com/repos/alfresco-open-mirror/alfresco/HEAD/root - * /projects/repository/source/java/org/alfresco/repo/jscript/People.java - * - * @param user - * @return - */ - public static List getUserGroups(String user) { - - List authorityNames = new ArrayList<>(); - - AuthorityService aService = services.getAuthorityService(); - Set authorities = aService.getContainingAuthoritiesInZone(AuthorityType.GROUP, user, null, null, 1000); - for (String authority : authorities) { - NodeRef group = aService.getAuthorityNodeRef(authority); - if (group != null) { - authorityNames.add(authority); - } - } - - return authorityNames; - } - - public static EmsScriptNode updateOrCreateArtifact(String artifactId, Path filePath, String fileType, String orgId, String projectId, String refId) { - - EmsScriptNode artifactNode; - String finalType = null; - File content = filePath.toFile(); - - try { - finalType = Files.probeContentType(filePath); - } catch (Exception e) { - if (logger.isDebugEnabled()) { - logger.debug("updateOrCreateArtifact: ", e); - } - } - - if (finalType == null) { - // Fallback if getting content type fails - if (fileType != null) { - finalType = fileType; - } else { - logger.error("Could not determine type of artifact: " + filePath.getFileName().toString()); - return null; - } - } - - EmsScriptNode targetSiteNode = EmsScriptNode.getSiteNode(orgId); - - // find site; it must exist! - if (targetSiteNode == null || !targetSiteNode.exists()) { - logger.error("Can't find node for site: " + orgId + "!"); - return null; - } - - // find or create subfolder - EmsScriptNode subfolder = targetSiteNode.childByNamePath("/" + projectId + "/refs/" + refId); - if (subfolder == null || !subfolder.exists()) { - return null; - } - - // find or create node: - artifactNode = subfolder.childByNamePath("/" + artifactId); - // Node wasnt found, so create one: - if (artifactNode == null) { - artifactNode = subfolder.createNode(artifactId, "cm:content"); - } - - if (artifactNode == null || !artifactNode.exists()) { - logger.error("Failed to create new PNG artifact " + artifactId + "!"); - return null; - } - - if (!artifactNode.hasAspect("cm:versionable")) { - artifactNode.addAspect("cm:versionable"); - } - if (!artifactNode.hasAspect("cm:indexControl")) { - artifactNode.addAspect("cm:indexControl"); - } - - artifactNode.createOrUpdateProperty(Acm.CM_TITLE, artifactId); - artifactNode.createOrUpdateProperty("cm:isIndexed", true); - artifactNode.createOrUpdateProperty("cm:isContentIndexed", false); - - if (logger.isDebugEnabled()) { - logger.debug("Creating artifact with indexing: " + artifactNode.getProperty("cm:isIndexed")); - } - - ContentWriter writer = - services.getContentService().getWriter(artifactNode.getNodeRef(), ContentModel.PROP_CONTENT, true); - writer.putContent(content); - - ContentData contentData = writer.getContentData(); - contentData = ContentData.setMimetype(contentData, finalType); - contentData = ContentData.setEncoding(contentData, "UTF-8"); - services.getNodeService().setProperty(artifactNode.getNodeRef(), ContentModel.PROP_CONTENT, contentData); - - return artifactNode; - } - - public static String getHostname() { - return services.getSysAdminParams().getAlfrescoHost(); - } - - /** - * getModuleService Retrieves the ModuleService of the ServiceRegistry passed in - * - * @param services ServiceRegistry object that contains the desired ModuleService - * @return ModuleService - */ - public static ModuleService getModuleService(ServiceRegistry services) { - // Checks to see if the services passed in is null, if so, it will call - // on class method getServices - if (services == null) { - services = getServices(); - } - // Takes the ServiceRegistry and calls the ModuleService super method - // getService(Creates an Alfresco QName using the namespace - // service and passes in the default URI - ModuleService moduleService = - (ModuleService) services.getService(QName.createQName(NamespaceService.ALFRESCO_URI, "ModuleService")); - return moduleService; - } - - /** - * getServiceModules - * - * Returns a JSONArray of Module Details from the Service Modules - * - * @param service the service containing modules to be returned - * @return JSONArray of ModuleDetails within the ModuleService object - */ - public static JsonArray getServiceModulesJson(ModuleService service) { - - JsonArray jsonArray = new JsonArray(); - List modules = service.getAllModules(); - for (ModuleDetails detail : modules) { - JsonObject jsonModule = moduleDetailsToJson(detail); - jsonArray.add(jsonModule); - } - return jsonArray; - } - - /** - * moduleDetailsToJson - * - * Takes a module of type ModuleDetails and retrieves all off the module's members and puts them - * into a newly instantiated JSONObject. - * - * JSONObject will have the details : title, version, aliases, class, dependencies, editions id - * and properties - * - * @param module A single module of type ModuleDetails - * @return JSONObject which contains all the details of that module - */ - public static JsonObject moduleDetailsToJson(ModuleDetails module) { - JsonObject jsonModule = new JsonObject(); - jsonModule.addProperty("mmsTitle", module.getTitle()); - jsonModule.addProperty("mmsVersion", module.getModuleVersionNumber().toString()); - JsonUtil.addStringList(jsonModule, "mmsAliases", module.getAliases()); - jsonModule.addProperty("mmsClass", module.getClass().toString()); - JsonArray depArray = new JsonArray(); - for (ModuleDependency depend: module.getDependencies()) - depArray.add(depend.toString()); - jsonModule.add("mmsDependencies", depArray); - JsonUtil.addStringList(jsonModule, "mmsEditions", module.getEditions()); - jsonModule.addProperty("mmsId", module.getId()); - JsonObject propObj = new JsonObject(); - Enumeration enumerator = module.getProperties().propertyNames(); - while (enumerator.hasMoreElements()) { - String key = (String)enumerator.nextElement(); - propObj.addProperty(key, module.getProperties().getProperty(key)); - } - jsonModule.add("mmsProperties", propObj); - return jsonModule; - } - - /** - * getMMSversion - * - * Gets the version number of a module, returns a JSONObject which calls on getString with - * 'version' as an argument. This will return a String representing the version of the - * mms. - * - * @return Version number of the MMS as type String - */ - public static String getMMSversion() { - ModuleService service = getModuleService(services); - JsonArray moduleDetails = getServiceModulesJson(service); - String mmsVersion = "NA"; - for (int i = 0; i < moduleDetails.size(); i++) { - JsonObject o = moduleDetails.get(i).getAsJsonObject(); - if (o.get("mmsId").getAsString().equalsIgnoreCase("mms-amp")) { - mmsVersion = o.get("mmsVersion").getAsString(); - } - } - - // Remove appended tags from version - int endIndex = mmsVersion.indexOf('-'); - return endIndex > -1 ? mmsVersion.substring(0, endIndex) : mmsVersion; - } -} diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index 7f019187..d05d3fdd 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -52,7 +52,6 @@ import gov.nasa.jpl.view_repo.util.EmsScriptNode; import gov.nasa.jpl.view_repo.util.JsonUtil; import gov.nasa.jpl.view_repo.util.LogUtil; -import gov.nasa.jpl.view_repo.util.NodeUtil; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; /** @@ -298,10 +297,7 @@ protected boolean checkPermissions(EmsScriptNode node, String permissions) { } public ServiceRegistry getServices() { - if (services == null) { - services = NodeUtil.getServices(); - } - return services; + return this.services; } protected boolean checkRequestContent(WebScriptRequest req) { @@ -516,8 +512,7 @@ public boolean compareMmsVersions(WebScriptRequest req, StringBuffer response, S } if (paramVal != null && !paramVal.equals("none") && paramVal.length() > 0) { - // Calls NodeUtil's getMMSversion - jsonVersion = getMMSversion(); + jsonVersion = getMMSversion(getServices()); mmsVersion = jsonVersion.get("mmsVersion").toString(); log(Level.INFO, HttpServletResponse.SC_OK, "Comparing Versions...."); @@ -577,9 +572,9 @@ public boolean compareMmsVersions(WebScriptRequest req, StringBuffer response, S * * @return JSONObject mmsVersion */ - public static JsonObject getMMSversion() { + public static JsonObject getMMSversion(ServiceRegistry services) { JsonObject version = new JsonObject(); - version.addProperty("mmsVersion", NodeUtil.getMMSversion()); + version.addProperty("mmsVersion", EmsNodeUtil.getMMSversion(services)); return version; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java index 602519f8..7d8ac5c0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java @@ -1,6 +1,6 @@ package gov.nasa.jpl.view_repo.webscripts; -import gov.nasa.jpl.view_repo.util.NodeUtil; +import gov.nasa.jpl.view_repo.util.EmsScriptNode; public class AllFlagsGet extends FlagSet { @@ -34,7 +34,7 @@ protected boolean set( boolean val ) { if (path.equalsIgnoreCase("checkMmsVersions")){ AbstractJavaWebScript.checkMmsVersions = val; } else if (path.equalsIgnoreCase("skipSvgToPng")){ - NodeUtil.skipSvgToPng = val; + EmsScriptNode.skipSvgToPng = val; } return true; } @@ -53,7 +53,7 @@ protected boolean get( String path ) { if (path.equalsIgnoreCase("checkMmsVersions")){ return AbstractJavaWebScript.checkMmsVersions; } else if (path.equalsIgnoreCase( "skipSvgToPng" )) { - return NodeUtil.skipSvgToPng; + return EmsScriptNode.skipSvgToPng; } return false; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java index e9d78d97..2b281c46 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java @@ -237,7 +237,7 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri // :TODO check against checksum first, md5hash(content), if matching return the previous version if (filePath != null) { - artifact = NodeUtil + artifact = EmsScriptNode .updateOrCreateArtifact(alfrescoId, filePath, JsonUtil.getOptString(postJson, Sjm.CONTENTTYPE), siteName, projectId, refId); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java index 99c6112f..348557f4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java @@ -7,7 +7,6 @@ import gov.nasa.jpl.view_repo.util.EmsNodeUtil; import gov.nasa.jpl.view_repo.util.EmsScriptNode; import gov.nasa.jpl.view_repo.util.JsonUtil; -import gov.nasa.jpl.view_repo.util.NodeUtil; import gov.nasa.jpl.view_repo.util.Sjm; import gov.nasa.jpl.view_repo.util.LogUtil; @@ -132,7 +131,7 @@ private void createDoc(JsonObject postJson, String filename, String siteName, St pandocConverter.convert(JsonUtil.getOptString(postJson, "body"), JsonUtil.getOptString(postJson, "css")); String artifactId = postJson.get(Sjm.NAME).getAsString().replaceAll("[^a-zA-Z0-9.-]", "_") + System.currentTimeMillis() + format; - EmsScriptNode artifact = NodeUtil.updateOrCreateArtifact(artifactId, filePath, format, siteName, projectId, refId); + EmsScriptNode artifact = EmsScriptNode.updateOrCreateArtifact(artifactId, filePath, format, siteName, projectId, refId); sendEmail(artifact, format); if (artifact == null) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java index 97cdf6b2..c1ff52b1 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java @@ -53,7 +53,7 @@ protected Map executeImplImpl(WebScriptRequest req, Status statu logger.debug("Checking MMS Versions"); } - mmsVersion = getMMSversion(); + mmsVersion = getMMSversion(getServices()); if (prettyPrint) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); model.put(Sjm.RES, gson.toJson(mmsVersion)); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java index 9db6e4b1..ff7ec3a9 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/LoginTicket.java @@ -35,7 +35,7 @@ import com.google.gson.JsonObject; -import static gov.nasa.jpl.view_repo.util.NodeUtil.services; +import static gov.nasa.jpl.view_repo.util.EmsScriptNode.services; import gov.nasa.jpl.view_repo.util.Sjm; /** diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/ModuleInfoGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/ModuleInfoGet.java index c6944027..432fb6c8 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/ModuleInfoGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/ModuleInfoGet.java @@ -21,9 +21,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import gov.nasa.jpl.view_repo.util.NodeUtil; import gov.nasa.jpl.view_repo.util.Sjm; -import gov.nasa.jpl.view_repo.webscripts.AbstractJavaWebScript; public class ModuleInfoGet extends DeclarativeWebScript { private static Logger logger = Logger.getLogger(ModuleInfoGet.class) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/SitePermission.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/SitePermission.java index ecc6b350..8fc44c69 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/SitePermission.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/util/SitePermission.java @@ -4,12 +4,12 @@ import java.util.Arrays; import java.util.List; +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.apache.log4j.Logger; import gov.nasa.jpl.mbee.util.Utils; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; import gov.nasa.jpl.view_repo.util.EmsScriptNode; -import gov.nasa.jpl.view_repo.util.NodeUtil; public class SitePermission { @@ -57,7 +57,7 @@ public static boolean hasPermissionToBranch(String orgId, String projectId, Stri } public static boolean isAdmin() { - List userGroups = NodeUtil.getUserGroups(NodeUtil.getUserName()); + List userGroups = EmsScriptNode.getUserGroups(AuthenticationUtil.getRunAsUser()); for (String adminString : adminList) { for (String userGroup : userGroups) { if (userGroup.contains(adminString)) { From ca0b20f2df36c3ed18a79517664aa5e8cefaddc4 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 27 Jun 2018 16:25:36 -0700 Subject: [PATCH 013/126] Adding some commands for starting elasticsearch and postgres --- mms-ent/docker/all-in-one/Dockerfile | 3 ++- mms-ent/docker/all-in-one/docker-entrypoint.sh | 8 ++++---- mms-ent/docker/config/set_properties.sh | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mms-ent/docker/all-in-one/Dockerfile b/mms-ent/docker/all-in-one/Dockerfile index 5f724abf..9641ff5d 100644 --- a/mms-ent/docker/all-in-one/Dockerfile +++ b/mms-ent/docker/all-in-one/Dockerfile @@ -54,6 +54,7 @@ ENV ELASTICSEARCH_VERSION 5.5.2 ENV ELASTICSEARCH_TARBALL "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ELASTICSEARCH_VERSION}.tar.gz" ENV ELASTICSEARCH_TARBALL_ASC "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ELASTICSEARCH_VERSION}.tar.gz.asc" ENV ELASTICSEARCH_TARBALL_SHA1 "91b3b3c823fafce54609ed5c9075d9cf50b2edff" +ENV ELASTICSEARCH_HOME $USR_LOCAL/elasticsearch ENV PG_MAJOR 9.4 ENV PG_VERSION 9.4.18 @@ -77,7 +78,7 @@ ENV FILES_DIR $USR_LOCAL/files ENV PGDATA /var/lib/postgresql/data -ENV PATH $USR_LOCAL/bin:$TOMCAT_HOME/bin:$PANDOC_HOME/bin:$PATH +ENV PATH $USR_LOCAL/bin:$TOMCAT_HOME/bin:$ELASTICSEARCH_HOME/bin:$PANDOC_HOME/bin:$PATH # ---- Install Dependencies ---- RUN apk upgrade --update \ diff --git a/mms-ent/docker/all-in-one/docker-entrypoint.sh b/mms-ent/docker/all-in-one/docker-entrypoint.sh index e8e128bd..b5b911e8 100644 --- a/mms-ent/docker/all-in-one/docker-entrypoint.sh +++ b/mms-ent/docker/all-in-one/docker-entrypoint.sh @@ -25,6 +25,7 @@ file_env() { } if [ "${1:0:1}" = '-' ]; then + set PATH="/usr/local/bin:/usr/local/tomcat/bin:/usr/local/elasticsearch/bin:/usr/local/pandoc/bin:$PATH" set -- postgres "$@" set -- elasticsearch "$@" fi @@ -46,10 +47,10 @@ if [ "$1" = 'postgres' ] && [ "$(id -u)" = '0' ]; then chmod 700 "$POSTGRES_INITDB_XLOGDIR" fi - exec su-exec /usr/local/bin/postgres "$BASH_SOURCE" "$@" + exec su-exec postgres "$BASH_SOURCE" "$@" fi -if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then +if [[ "$1" = *'elasticsearch'* -a "$(id -u)" = '0' ]]; then # Change the ownership of user-mutable directories to elasticsearch for path in \ /usr/share/elasticsearch/data \ @@ -58,8 +59,7 @@ if [ "$1" = 'elasticsearch' -a "$(id -u)" = '0' ]; then chown -R elasticsearch:elasticsearch "$path" done - set -- su-exec /usr/local/elasticsearch/bin/elasticsearch "$@" - #exec su-exec elasticsearch "$BASH_SOURCE" "$@" + exec su-exec elasticsearch "$BASH_SOURCE" "$@" fi if [ "$1" = 'postgres' ]; then diff --git a/mms-ent/docker/config/set_properties.sh b/mms-ent/docker/config/set_properties.sh index 4d1c1539..2cf59094 100644 --- a/mms-ent/docker/config/set_properties.sh +++ b/mms-ent/docker/config/set_properties.sh @@ -52,5 +52,5 @@ else fi # Run these unconditionally -sed -i'' -e "s/pandoc.exec=\/usr\/local\/bin\/pandoc/pandoc.exec=\/usr\/local\/pandoc\/bin\/pandoc" /usr/local/tomcat/shared/classes/mms.properties +sed -i'' -e "s/pandoc.exec=\/usr\/local\/bin\/pandoc/pandoc.exec=\/usr\/local\/pandoc\/bin\/pandoc/" /usr/local/tomcat/shared/classes/mms.properties export CATALINA_TMPDIR=/mnt/alf_data/temp From 64fe45f5f8dbff12ae4510f2a7acbabf70b53632 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 27 Jun 2018 17:48:02 -0700 Subject: [PATCH 014/126] Bump version --- mms-ent/pom.xml | 2 +- mms-ent/repo-amp/pom.xml | 2 +- mms-ent/repo/pom.xml | 2 +- mms-ent/runner/pom.xml | 2 +- mms-ent/share-amp/pom.xml | 2 +- mms-ent/share/pom.xml | 2 +- mms-ent/solr-config/pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mms-ent/pom.xml b/mms-ent/pom.xml index df63e245..73362684 100755 --- a/mms-ent/pom.xml +++ b/mms-ent/pom.xml @@ -4,7 +4,7 @@ 4.0.0 gov.nasa.jpl.mbee mms-ent - 3.3.0 + 3.3.1-SNAPSHOT Alfresco Repository and Share Quickstart with database and an embedded Tomcat runner. This All-in-One project allows to manage all the components involved in Alfresco development (Repo, Share, Solr4, AMPs) in one project diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index b48af0ff..f1c99fd6 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -10,7 +10,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.0 + 3.3.1-SNAPSHOT diff --git a/mms-ent/repo/pom.xml b/mms-ent/repo/pom.xml index 1f02d639..7a741c95 100755 --- a/mms-ent/repo/pom.xml +++ b/mms-ent/repo/pom.xml @@ -18,7 +18,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.0 + 3.3.1-SNAPSHOT diff --git a/mms-ent/runner/pom.xml b/mms-ent/runner/pom.xml index 3aa46e18..9ad1da49 100755 --- a/mms-ent/runner/pom.xml +++ b/mms-ent/runner/pom.xml @@ -9,7 +9,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.0 + 3.3.1-SNAPSHOT diff --git a/mms-ent/share-amp/pom.xml b/mms-ent/share-amp/pom.xml index 85da4573..d55086ff 100644 --- a/mms-ent/share-amp/pom.xml +++ b/mms-ent/share-amp/pom.xml @@ -9,7 +9,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.0 + 3.3.1-SNAPSHOT + + sonatype + Sonatype Groups + https://oss.sonatype.org/content/groups/public/ + + + spring + Spring Maven Repository + http://repo.spring.io/plugins-release/ + alfresco-public https://artifacts.alfresco.com/nexus/content/groups/public @@ -29,17 +40,6 @@ true - - - activiti-private-repository - https://artifacts.alfresco.com/nexus/content/repositories/activiti-enterprise-releases - - - - sonatype - Sonatype Groups - https://oss.sonatype.org/content/groups/public/ - @@ -77,7 +77,7 @@ c3p0 0.9.1.2 - + com.google.guava guava 18.0 @@ -224,6 +224,13 @@ provided + + + + activiti-private-repository + https://artifacts.alfresco.com/nexus/content/repositories/activiti-enterprise-releases + + @@ -275,6 +282,10 @@ true java8-localdatetime + gov.nasa.jpl.mms + mms-java-client + ${parent.version} + true ${swagger.codegen.target}/java @@ -336,6 +347,9 @@ maven-assembly-plugin mms + + bin + assembly/mms-java-client.xml assembly/mms-python-client.xml From a5d95ca378c876ff390bbaa9e7c8fb203d50dbc2 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Fri, 13 Jul 2018 15:35:19 -0700 Subject: [PATCH 019/126] Remove descriptorRefs --- mms-ent/repo-amp/pom.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 20431639..872a92bf 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -347,9 +347,6 @@ maven-assembly-plugin mms - - bin - assembly/mms-java-client.xml assembly/mms-python-client.xml From 303630186b0bbf589ef0af84e1f3cdd8933d7c43 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 19 Jul 2018 14:52:37 -0700 Subject: [PATCH 020/126] Tests for swapping owner properties to test code that's buggy --- .../jpl/mms/refs/elements/moves.post.desc.xml | 13 ++ .../jpl/mms/refs/elements/moves.post.json.ftl | 1 + .../jpl/view_repo/webscripts/MovePost.java | 7 ++ .../JsonData/PostMoveElements.json | 119 ++++++++++++++++++ 4 files changed, 140 insertions(+) create mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml create mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl create mode 100644 mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java create mode 100644 mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml new file mode 100644 index 00000000..80d1a01a --- /dev/null +++ b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml @@ -0,0 +1,13 @@ + + + + post elements + + post elements + + /projects/{projectId}/refs/{refId}/elements + argument + user + required + MMS REST API + diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl new file mode 100644 index 00000000..1897f75d --- /dev/null +++ b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl @@ -0,0 +1 @@ +${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java new file mode 100644 index 00000000..6d1857bd --- /dev/null +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -0,0 +1,7 @@ +package gov.nasa.jpl.view_repo.webscripts; + +/** + * Created by lauram on 7/16/18. + */ +public class MovePost { +} diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json new file mode 100644 index 00000000..425a9c0c --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json @@ -0,0 +1,119 @@ +{ // ownerId of a1 becomes pack2 and propertyType of ap1 becomes b2 + "elements": [ + { + "id": "pack1", + "type": "Package", + "ownerId": "PA" + }, + { + "id": "pack2", + "type": "Package", + "ownerId": "PA" + }, + { + "documentation": "something", + "id": "b1", + "ownedAttributeIds": [ + "p" + ], + "name": "org parent of p", + "ownerId": "pack1", + "type": "Class", + "isDerived": false, + "value": [ + { + "type": "LiteralString", + "string": "dlam_string" + } + ] + }, + { + "documentation": "else", + "id": "b2", + "ownedAttributeIds": [ + "blah" + ], + "name": "new parent of p", + "ownerId": "PA", + "type": "Class", + "isDerived": false, + "value": [ + { + "type": "LiteralString", + "string": "dlam_string" + } + ] + }, + { + "documentation": "else", + "id": "p1", + "assoicationId":"a1", + "name": "three hundred and one", + "ownerId": "b1", + "type": "Property", + "isDerived": false, + "value": [ + { + "type": "LiteralString", + "string": "dlam_string" + } + ] + }, + { + "type": "Association", + "id": "a1", + "ownedEndIds": ["ap1"], + "ownerId": "pack1" + }, + { + "type": "Property", + "id": "ap1", + "propertyType": "b1", + "ownerId": "a1" + }, + { + "documentation": "else", + "id": "p2", + "name": "three hundred and one", + "ownerId": "b1", + "type": "Property", + "isDerived": false, + "value": [ + { + "type": "LiteralString", + "string": "dlam_string" + } + ] + }, + { + "documentation": "else", + "id": "p3", + "name": "three hundred and one", + "ownerId": "b1", + "type": "Property", + "isDerived": false, + "value": [ + { + "type": "LiteralString", + "string": "dlam_string" + } + ] + }, + { + "documentation": "else", + "id": "p4", + "name": "three hundred and one", + "ownerId": "b1", + "type": "Property", + "isDerived": false, + "value": [ + { + "type": "LiteralString", + "string": "dlam_string" + } + ] + } + + + ] +} From 27966b91ffb30db42113e6c256d234be8a3f868d Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 24 Jul 2018 15:57:03 -0700 Subject: [PATCH 021/126] First suite of tests. Checking on logic --- .../jpl/mms/refs/elements/moves.post.desc.xml | 2 +- .../mms-amp/context/mms-service-context.xml | 6 + .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 48 +++- .../java/gov/nasa/jpl/view_repo/util/Sjm.java | 1 + .../jpl/view_repo/webscripts/MovePost.java | 264 +++++++++++++++++- .../robotframework/JsonData/MoveOwner.json | 12 + .../JsonData/PostMoveElements.json | 10 +- .../JsonData/ProjectCreationForMove.json | 11 + .../suites/01__crud/04__move_post.robot | 55 ++++ 9 files changed, 396 insertions(+), 13 deletions(-) create mode 100644 mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json create mode 100644 mms-ent/runner/src/test/robotframework/JsonData/ProjectCreationForMove.json create mode 100644 mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml index 80d1a01a..82801274 100644 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml +++ b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.desc.xml @@ -5,7 +5,7 @@ post elements - /projects/{projectId}/refs/{refId}/elements + /projects/{projectId}/refs/{refId}/propertyMove argument user required diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml index 48ab3fba..2c81a848 100755 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml +++ b/mms-ent/repo-amp/src/main/amp/config/alfresco/module/mms-amp/context/mms-service-context.xml @@ -277,4 +277,10 @@ + + + + diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index b49f86b5..43960dc2 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -45,6 +45,7 @@ import gov.nasa.jpl.mbee.util.TimeUtils; import gov.nasa.jpl.view_repo.db.GraphInterface.DbEdgeTypes; import gov.nasa.jpl.view_repo.db.GraphInterface.DbNodeTypes; +import org.json.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -1262,6 +1263,49 @@ private Map getQualifiedInformationForElement(JsonObject element return result; } + public List> processMove(JsonArray moveData) throws IOException { + List> elements = new ArrayList>(); + Map froms = new HashMap<>(); + for (int i = 0; i < moveData.size(); i++) { + String fromId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from"); + String id = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID); + if (froms.containsKey(fromId)) { + froms.get(fromId).add(id); + }else{ + ArrayList ids = new ArrayList(); + ids.add(id); + froms.put(fromId, ids); + } + } + for (Map.Entry entry : froms.entrySet()) { + String key = entry.getKey(); + ArrayList value = entry.getValue(); + JsonObject from = eh.getElementByElasticId(pgh.getElasticIdFromSysmlId(key), projectId); + JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(from, Sjm.OWNEDATTRIBUTEIDS); + for(String remove: value){ + if(ownedAttributeIdsToRemove.contains(remove)){ + + } + + + } + } + + // for (int i = 0; i < moveData.size(); i++) { + // try { + // String id = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID); + // //JsonObject to = eh.getElementByElasticId(pgh.getElasticIdFromSysmlId(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID)), projectId); + // JsonObject from = eh.getElementByElasticId( + // pgh.getElasticIdFromSysmlId(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from")), + // projectId); + // } catch (IOException e) { + // e.printStackTrace(); + // } + // } + return elements; + + } + public boolean isDeleted(String sysmlid) { return pgh.isDeleted(sysmlid); } @@ -1967,7 +2011,7 @@ public static JsonObject moduleDetailsToJson(ModuleDetails module) { JsonUtil.addStringList(jsonModule, "mmsAliases", module.getAliases()); jsonModule.addProperty("mmsClass", module.getClass().toString()); JsonArray depArray = new JsonArray(); - for (ModuleDependency depend: module.getDependencies()) + for (ModuleDependency depend : module.getDependencies()) depArray.add(depend.toString()); jsonModule.add("mmsDependencies", depArray); JsonUtil.addStringList(jsonModule, "mmsEditions", module.getEditions()); @@ -1975,7 +2019,7 @@ public static JsonObject moduleDetailsToJson(ModuleDetails module) { JsonObject propObj = new JsonObject(); Enumeration enumerator = module.getProperties().propertyNames(); while (enumerator.hasMoreElements()) { - String key = (String)enumerator.nextElement(); + String key = (String) enumerator.nextElement(); propObj.addProperty(key, module.getProperties().getProperty(key)); } jsonModule.add("mmsProperties", propObj); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java index d540b245..791939d4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java @@ -158,6 +158,7 @@ public class Sjm { public static final String ELEMENT = "Element"; public static final String ARTIFACT = "Artifact"; public static final String PROFILES = "profile"; + public static final String MOVES = "moves"; public static final Map STEREOTYPEIDS; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index 6d1857bd..559fd468 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -1,7 +1,263 @@ +/******************************************************************************* + * Copyright (c) <2013>, California Institute of Technology ("Caltech"). + * + * U.S. Government sponsorship acknowledged. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are permitted + * provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this list of conditions + * and the following disclaimer. - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the documentation and/or other + * materials provided with the distribution. - Neither the name of Caltech nor its operating + * division, the Jet Propulsion Laboratory, nor the names of its contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY + * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************/ + package gov.nasa.jpl.view_repo.webscripts; -/** - * Created by lauram on 7/16/18. - */ -public class MovePost { +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.HashSet; +import javax.servlet.http.HttpServletResponse; + +import gov.nasa.jpl.view_repo.util.CommitUtil; +import gov.nasa.jpl.view_repo.util.EmsNodeUtil; +import gov.nasa.jpl.view_repo.util.LogUtil; +import gov.nasa.jpl.view_repo.util.Sjm; +import gov.nasa.jpl.view_repo.util.EmsScriptNode; +import gov.nasa.jpl.view_repo.util.JsonUtil; + +import org.alfresco.repo.model.Repository; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.service.ServiceRegistry; +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.json.JSONObject; +import org.springframework.extensions.webscripts.Cache; +import org.springframework.extensions.webscripts.Status; +import org.springframework.extensions.webscripts.WebScriptRequest; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import gov.nasa.jpl.mbee.util.Timer; + +//mms - make new endpoint for moving property, (for multiple properties at once, will need to consolidate end state in case multiple moves to same element) +// +// changes needed for moving property p from b1 to b2 at index i (0 based?) +// +// change owner of p from b1 to b2 +// remove pId from b1's list of ownedAttributeIds +// insert pId to b2's list of ownedAttributeIds at i +// if p has associationId +// change association's owner to be the closest parent package of b2 +// if association's ownedEndId is not empty, change the referenced element's typeId to be b2 +// case if b1 == b2 and just moving index +// only change b's ownedAttributeIds list to have pId at the correct place +//{ +// "moves":[ +// { +// "id": "propertyId", +// "from": "old block id", +// "to": "new block id", +// "index": i +// } +// ] +// } + + +public class MovePost extends ModelPost { + //static Logger logger = Logger.getLogger(MovePost.class); + + //protected EmsScriptNode workspace = null; + + //private final String NEWELEMENTS = "newElements"; + + //public static boolean timeEvents = false; + + public MovePost() { + super(); + } + + public MovePost(Repository repositoryHelper, ServiceRegistry registry) { + super(repositoryHelper, registry); + } + + /** + * Entry point + */ + @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { + + MovePost instance = new MovePost(repository, services); + instance.setServices(getServices()); + + return instance.executeImplImpl(req, status, cache); + } + + @Override + protected Map executeImplImpl(final WebScriptRequest req, final Status status, Cache cache) { + String user = AuthenticationUtil.getFullyAuthenticatedUser(); + + printHeader(user, logger, req, true); + + Timer timer = new Timer(); + + Map result; + String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); + + // call move logic + + result = handleElementPost(req, status, user, contentType); + + printFooter(user, logger, timer); + + return result; + } + + protected JsonObject createDeltaForMove(final WebScriptRequest req, final Status status, String user) { + JsonObject newElementsObject = new JsonObject(); + JsonObject results; + + String refId = getRefId(req); + String projectId = getProjectId(req); + //Map model = new HashMap<>(); + + + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + + try { + JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); + + if (logger.isDebugEnabled()) { + logger.debug(String.format("Post Data: '%s'", postJson)); + } + emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); + //model.put(Sjm.RES, createResponseJson + } + return newElementsObject; + + } + + protected Map handleElementPost(final WebScriptRequest req, final Status status, String user, + String contentType) { + JsonObject newElementsObject = new JsonObject(); + JsonObject results; + boolean extended = Boolean.parseBoolean(req.getParameter("extended")); + boolean withChildViews = Boolean.parseBoolean(req.getParameter("childviews")); + boolean overwriteJson = Boolean.parseBoolean(req.getParameter("overwrite")); + + String refId = getRefId(req); + String projectId = getProjectId(req); + Map model = new HashMap<>(); + + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + + try { + JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); + + if (logger.isDebugEnabled()) { + logger.debug(String.format("Post Data: '%s'", postJson)); + } + + this.populateSourceApplicationFromJson(postJson); + Set oldElasticIds = new HashSet<>(); + + emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + //results = postJson.get(Sjm.MOVES).getAsJsonArray(); + + // String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); + + String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); + + results = emsNodeUtil + .processPostJson(postJson.get(Sjm.MOVES).getAsJsonArray(), user, oldElasticIds, overwriteJson, + this.requestSourceApplication, comment, Sjm.MOVES); + + // String commitId = results.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); + // + // int added = JsonUtil.getOptArray(results, "addedElements").size(); + // int updated = JsonUtil.getOptArray(results, "updatedElements").size(); + // int deleted = JsonUtil.getOptArray(results, "deletedElements").size(); + // + // if (added + updated + deleted == 0) { + // JsonObject rejected = new JsonObject(); + // rejected.addProperty(Sjm.CREATOR, user); + // rejected.add(Sjm.ELEMENTS, new JsonArray()); + // JsonArray rejectedElements = JsonUtil.getOptArray(results, "rejectedElements"); + // rejected.add(Sjm.REJECTED, rejectedElements); + // model.put(Sjm.RES, rejected); + // } else if (CommitUtil + // .sendDeltas(results, projectId, refId, requestSourceApplication, services, withChildViews, false)) { + // if (!oldElasticIds.isEmpty()) { + // emsNodeUtil.updateElasticRemoveRefs(oldElasticIds, "element"); + // } + // Map commitObject = emsNodeUtil.getGuidAndTimestampFromElasticId(commitId); + // + // if (withChildViews) { + // JsonArray array = results.get(NEWELEMENTS).getAsJsonArray(); + // for (int i = 0; i < array.size(); i++) { + // array.set(i, emsNodeUtil.addChildViews(array.get(i).getAsJsonObject())); + // } + // } + // + // newElementsObject.add(Sjm.ELEMENTS, extended ? + // emsNodeUtil.addExtendedInformation(filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)) + // : filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)); + // if (results.has("rejectedElements")) { + // newElementsObject.add(Sjm.REJECTED, results.get("rejectedElements")); + // } + // newElementsObject.addProperty(Sjm.COMMITID, commitId); + // newElementsObject.addProperty(Sjm.TIMESTAMP, commitObject.get(Sjm.TIMESTAMP)); + // newElementsObject.addProperty(Sjm.CREATOR, user); + // + // if (prettyPrint) { + // Gson gson = new GsonBuilder().setPrettyPrinting().create(); + // model.put(Sjm.RES, gson.toJson(newElementsObject)); + // } else { + // model.put(Sjm.RES, newElementsObject); + // } + // + // status.setCode(responseStatus.getCode()); + // } else { + // log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, + // "Commit failed, please check server logs for failed items"); + // model.put(Sjm.RES, createResponseJson()); + // } + + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); + model.put(Sjm.RES, createResponseJson()); + } catch (Exception e) { + logger.error(String.format("%s", LogUtil.getStackTrace(e))); + model.put(Sjm.RES, createResponseJson()); + } + + status.setCode(responseStatus.getCode()); + + return model; + } + + @Override protected boolean validateRequest(WebScriptRequest req, Status status) { + String elementId = req.getServiceMatch().getTemplateVars().get("elementid"); + if (elementId != null && !checkRequestVariable(elementId, "elementid")) { + return false; + } + + return checkRequestContent(req); + } } diff --git a/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json b/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json new file mode 100644 index 00000000..2867b06c --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json @@ -0,0 +1,12 @@ +{ + "moves": [ + { + "_creator": "admin", + "_modifier": "admin", + "id": "p", + "from": "b1", + "to": "b2", + "index":"0" + } + ] +} diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json index 425a9c0c..ed1321d0 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json @@ -3,12 +3,12 @@ { "id": "pack1", "type": "Package", - "ownerId": "PA" + "ownerId": "MoveModel" }, { "id": "pack2", "type": "Package", - "ownerId": "PA" + "ownerId": "MoveModel" }, { "documentation": "something", @@ -30,11 +30,9 @@ { "documentation": "else", "id": "b2", - "ownedAttributeIds": [ - "blah" - ], + "ownedAttributeIds": [], "name": "new parent of p", - "ownerId": "PA", + "ownerId": "MoveModel", "type": "Class", "isDerived": false, "value": [ diff --git a/mms-ent/runner/src/test/robotframework/JsonData/ProjectCreationForMove.json b/mms-ent/runner/src/test/robotframework/JsonData/ProjectCreationForMove.json new file mode 100644 index 00000000..522f3ad2 --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/JsonData/ProjectCreationForMove.json @@ -0,0 +1,11 @@ +{ + "projects": [ + { + "_creator": "admin", + "_modifier": "admin", + "id": "MoveModel", + "name": "Project", + "type": "Project" + } + ] +} diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot new file mode 100644 index 00000000..4173281a --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -0,0 +1,55 @@ +*** Settings *** +Documentation Testing CRUD Operations on Master +Resource ../resources.robot + +*** Test Cases *** +ProjectCreationForMove + [Documentation] "Create a project (ID: MoveModel) under the organization with ID: initorg" + [Tags] crud critical 010401 + ${post_json} = Get File ${CURDIR}/../../JsonData/ProjectCreationForMove.json + ${result} = Post url=${ROOT}/orgs/initorg/projects data=${post_json} headers=&{REQ_HEADER} + Should Be Equal ${result.status_code} ${200} + +PostNewElementsToMove + [Documentation] "Post elements to the newly created project and organization." + [Tags] crud critical 010402 + ${post_json} = Get File ${CURDIR}/../../JsonData/PostMoveElements.json + ${result} = Post url=${ROOT}/projects/CompleteModelGet/refs/master/elements data=${post_json} headers=&{REQ_HEADER} + Should Be Equal ${result.status_code} ${200} + Sleep ${POST_DELAY_INDEXING} + ${commit} = Get Commit Id ${result.json()} + Set Global Variable ${commit} + +GetAllElementsForMove + [Documentation] "Get All the elements in the model" + [Tags] mounts critical 010403 + ${result} = Get url=${ROOT}/projects/MoveModel/refs/master/propertyMove headers=&{REQ_HEADER} + Should Be Equal ${result.status_code} ${200} + ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds + Generate JSON ${TEST_NAME} ${result.json()} ${filter} + ${compare_result} = Compare JSON ${TEST_NAME} + Should Match Baseline ${compare_result} + +ChangeOwner + [Documentation] "Change owner of p from b1 to b2. Remove pId from b1's list of ownedAttributeIds. Insert pId to b2's list of ownedAttributeIds at i" + [Tags] crud critical 010404 + ${post_json} = Get File ${CURDIR}/../../JsonData/MoveOwner.json + ${result} = Post url=${ROOT}/projects/CompleteModelGet/refs/master/elements data=${post_json} headers=&{REQ_HEADER} + Should Be Equal ${result.status_code} ${200} + +#GetAllElementsInModelFromCommit +# [Documentation] "Get All the elements in the model excluding the element with no owner" +# [Tags] mounts critical 010306 +# ${result} = Get url=${ROOT}/projects/CompleteModelGet/refs/master/elements?commitId=${commit} headers=&{REQ_HEADER} +# Should Be Equal ${result.status_code} ${200} +# ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds +# Generate JSON ${TEST_NAME} ${result.json()} ${filter} +# ${compare_result} = Compare JSON ${TEST_NAME} +# Should Match Baseline ${compare_result} +# +#GetAllElementsByProjectAndRef +# [Documentation] "Compare returned models" +# [Tags] critical workspaces 010307 +# ${resultA} = Get url=${ROOT}/projects/CompleteModelGet/refs/master/elements headers=&{REQ_HEADER} +# ${resultB} = Get url=${ROOT}/projects/CompleteModelGet/refs/master/elements/PA?depth=-1 headers=&{REQ_HEADER} +# Should Not Be Equal ${resultA.json()} ${resultB.json()} From bd7c65dad12dfede0f3707c8dc547b895d78430b Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Wed, 25 Jul 2018 14:38:59 -0700 Subject: [PATCH 022/126] fixed tests, fixed map in emsnodeutil. --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 52 ++++++++----------- .../jpl/view_repo/webscripts/MovePost.java | 11 ++-- .../suites/01__crud/04__move_post.robot | 4 +- 3 files changed, 28 insertions(+), 39 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 43960dc2..a98490d0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -10,19 +10,7 @@ import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.Calendar; -import java.util.TimeZone; +import java.util.*; import gov.nasa.jpl.view_repo.db.*; import org.alfresco.repo.service.ServiceDescriptorRegistry; @@ -1265,31 +1253,33 @@ private Map getQualifiedInformationForElement(JsonObject element public List> processMove(JsonArray moveData) throws IOException { List> elements = new ArrayList>(); - Map froms = new HashMap<>(); + Map froms = new HashMap<>(); for (int i = 0; i < moveData.size(); i++) { String fromId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from"); String id = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID); if (froms.containsKey(fromId)) { - froms.get(fromId).add(id); + froms.get(fromId).put(Integer.parseInt(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "index")), id); }else{ - ArrayList ids = new ArrayList(); - ids.add(id); - froms.put(fromId, ids); - } - } - for (Map.Entry entry : froms.entrySet()) { - String key = entry.getKey(); - ArrayList value = entry.getValue(); - JsonObject from = eh.getElementByElasticId(pgh.getElasticIdFromSysmlId(key), projectId); - JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(from, Sjm.OWNEDATTRIBUTEIDS); - for(String remove: value){ - if(ownedAttributeIdsToRemove.contains(remove)){ - - } - - + Map indexed = new TreeMap<>(); + indexed.put(Integer.parseInt(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "index")), id); + froms.put(fromId, indexed); } } +// for (Map.Entry entry : froms.entrySet()) { +// String key = entry.getKey(); +// Map childMap = entry.getValue(); +// +// for (Map.Entry entry2 : childMap.entrySet()) {} +// JsonObject from = eh.getElementByElasticId(pgh.getElasticIdFromSysmlId(key), projectId); +// JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(from, Sjm.OWNEDATTRIBUTEIDS); +// for(String remove: value){ +// if(ownedAttributeIdsToRemove.contains(remove)){ +// +// } +// +// +// } +// } // for (int i = 0; i < moveData.size(); i++) { // try { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index 559fd468..d714bc3a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -25,10 +25,8 @@ package gov.nasa.jpl.view_repo.webscripts; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; -import java.util.HashSet; +import java.io.IOException; +import java.util.*; import javax.servlet.http.HttpServletResponse; import gov.nasa.jpl.view_repo.util.CommitUtil; @@ -127,7 +125,8 @@ protected Map executeImplImpl(final WebScriptRequest req, final return result; } - protected JsonObject createDeltaForMove(final WebScriptRequest req, final Status status, String user) { + protected JsonObject createDeltaForMove(final WebScriptRequest req, final Status status, String user) + throws IOException { JsonObject newElementsObject = new JsonObject(); JsonObject results; @@ -144,7 +143,7 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req, final Status if (logger.isDebugEnabled()) { logger.debug(String.format("Post Data: '%s'", postJson)); } - emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + List> blah = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); //model.put(Sjm.RES, createResponseJson diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index 4173281a..e1b963d1 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -23,7 +23,7 @@ PostNewElementsToMove GetAllElementsForMove [Documentation] "Get All the elements in the model" [Tags] mounts critical 010403 - ${result} = Get url=${ROOT}/projects/MoveModel/refs/master/propertyMove headers=&{REQ_HEADER} + ${result} = Get url=${ROOT}/projects/MoveModel/refs/master/elements headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds Generate JSON ${TEST_NAME} ${result.json()} ${filter} @@ -34,7 +34,7 @@ ChangeOwner [Documentation] "Change owner of p from b1 to b2. Remove pId from b1's list of ownedAttributeIds. Insert pId to b2's list of ownedAttributeIds at i" [Tags] crud critical 010404 ${post_json} = Get File ${CURDIR}/../../JsonData/MoveOwner.json - ${result} = Post url=${ROOT}/projects/CompleteModelGet/refs/master/elements data=${post_json} headers=&{REQ_HEADER} + ${result} = Post url=${ROOT}/projects/CompleteModelGet/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} #GetAllElementsInModelFromCommit From 344d8ca59d35718f82f2c72ed3e8860e04c2da1d Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 26 Jul 2018 16:24:21 -0700 Subject: [PATCH 023/126] Trying to use directories for store_artifacts --- .circleci/config.yml | 40 +++++++++++++--------------------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8e95dd2d..88c1bf06 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: - run: name: Run Maven Build - command: cd mms-ent && sh mvnw install -Pbuild + command: cd mms-ent && sh mvnw install -Pbuild && mvnw install -f repo-amp/target/generated-sources/swagger/java/pom.xml - save_cache: paths: @@ -27,24 +27,10 @@ jobs: command: mkdir -p tmp/artifacts - store_artifacts: - path: mms-ent/repo-amp/target/mms-amp-3.3.0-SNAPSHOT.amp - destination: tmp/artifacts/mms-amp-3.3.0-SNAPSHOT.amp + path: mms-ent/repo-amp/target - store_artifacts: - path: mms-ent/share-amp/target/mms-share-amp-3.3.0-SNAPSHOT.amp - destination: tmp/artifacts/mms-share-amp-3.3.0-SNAPSHOT.amp - - - store_artifacts: - path: mms-ent/repo-amp/target/mms-java-client-3.3.0-SNAPSHOT.zip - destination: tmp/artifacts/mms-java-client-3.3.0-SNAPSHOT.zip - - - store_artifacts: - path: mms-ent/repo-amp/target/mms-python-client-3.3.0-SNAPSHOT.zip - destination: tmp/artifacts/mms-python-client-3.3.0-SNAPSHOT.zip - - - store_artifacts: - path: mms-ent/repo-amp/target/mms-mathematica-client-3.3.0-SNAPSHOT.zip - destination: tmp/artifacts/mms-mathematica-client-3.3.0-SNAPSHOT.zip + path: mms-ent/share-amp/target - persist_to_workspace: root: mms-ent @@ -68,19 +54,19 @@ jobs: command: ./jfrog rt config --url $ARTIFACTORY_URL --user $ARTIFACTORY_USER --apikey $ARTIFACTORY_APIKEY --interactive false - run: name: Send mms-amp - command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms-share-amp - command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms mathematica client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true deploy_release: <<: *defaults @@ -98,19 +84,19 @@ jobs: command: ./jfrog rt config --url $ARTIFACTORY_URL --user $ARTIFACTORY_USER --apikey $ARTIFACTORY_APIKEY --interactive false - run: name: Send mms-amp - command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms-share-amp - command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-share-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-java-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-python-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms mathematica client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true workflows: version: 2 From 7f4a870d245190e08a1ea41c15b432f5e140e3dc Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 26 Jul 2018 16:28:18 -0700 Subject: [PATCH 024/126] Fix typo --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 88c1bf06..bd53b77c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: - run: name: Run Maven Build - command: cd mms-ent && sh mvnw install -Pbuild && mvnw install -f repo-amp/target/generated-sources/swagger/java/pom.xml + command: cd mms-ent && sh mvnw install -Pbuild && sh mvnw install -f repo-amp/target/generated-sources/swagger/java/pom.xml - save_cache: paths: From ad08a6c28067c20eb50ded2d0134e405da1649ee Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 26 Jul 2018 16:39:07 -0700 Subject: [PATCH 025/126] Fix java client deployment --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bd53b77c..bc1ae9d8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -60,7 +60,7 @@ jobs: command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/generated-sources/swagger/java/target/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true From 45986d55b7ee938bb06c8c7df07291c52f3c87ae Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 26 Jul 2018 17:27:07 -0700 Subject: [PATCH 026/126] Add in step to cleanup target directory --- .circleci/config.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bc1ae9d8..f1aaddf7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -22,6 +22,10 @@ jobs: - ~/.m2 key: mms-{{ checksum "mms-ent/pom.xml" }} + - run: + name: Clean target directory + command: mkdir -p mms-ent/repo-amp/target/mms-java-client && mv mms-ent/repo-amp/target/generated-sources/swagger/java/target/*.jar mms-ent/repo-amp/target/mms-java-client && rm -rf mms-ent/repo-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} && rm -rf mms-ent/share-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} + - run: name: Prepare Store Artifacts command: mkdir -p tmp/artifacts @@ -60,7 +64,10 @@ jobs: command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/generated-sources/swagger/java/target/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + - run: + name: Send mms java client + command: ./jfrog rt u 'mms-ent/repo-amp/target/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true @@ -90,7 +97,7 @@ jobs: command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.jar' libs-release-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true From b12c9e825a0a82486b0e076173015889732f6886 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 30 Jul 2018 10:40:08 -0700 Subject: [PATCH 027/126] Adjust namespace for java client generation --- mms-ent/repo-amp/pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 872a92bf..c669ca67 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -282,9 +282,12 @@ true java8-localdatetime - gov.nasa.jpl.mms + org.openmbee.mms mms-java-client ${parent.version} + org.openmbee.mms.client + org.openmbee.mms.client.model + org.openmbee.mms.client.api true ${swagger.codegen.target}/java From a8926884900f752964060e1af96caf502e5da2a7 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 30 Jul 2018 10:43:47 -0700 Subject: [PATCH 028/126] Fix pom location for java client --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f1aaddf7..2db68111 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -67,7 +67,7 @@ jobs: command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/generated-sources/swagger/java/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true From a4b98bf3f0f59c0fe6b37c1bf3261c173f4054e2 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 30 Jul 2018 10:49:55 -0700 Subject: [PATCH 029/126] Move pom to correct location --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2db68111..e0899955 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -24,7 +24,7 @@ jobs: - run: name: Clean target directory - command: mkdir -p mms-ent/repo-amp/target/mms-java-client && mv mms-ent/repo-amp/target/generated-sources/swagger/java/target/*.jar mms-ent/repo-amp/target/mms-java-client && rm -rf mms-ent/repo-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} && rm -rf mms-ent/share-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} + command: mkdir -p mms-ent/repo-amp/target/mms-java-client && mv mms-ent/repo-amp/target/generated-sources/swagger/java/target/*.jar mms-ent/repo-amp/target/generated-sources/swagger/java/target/pom.xml mms-ent/repo-amp/target/mms-java-client && rm -rf mms-ent/repo-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} && rm -rf mms-ent/share-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} - run: name: Prepare Store Artifacts @@ -67,7 +67,7 @@ jobs: command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/generated-sources/swagger/java/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true From d29688cc982c9829f55d757d5f915034b23cab59 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 30 Jul 2018 10:55:06 -0700 Subject: [PATCH 030/126] Fixing location of the pom --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e0899955..9f676647 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -24,7 +24,7 @@ jobs: - run: name: Clean target directory - command: mkdir -p mms-ent/repo-amp/target/mms-java-client && mv mms-ent/repo-amp/target/generated-sources/swagger/java/target/*.jar mms-ent/repo-amp/target/generated-sources/swagger/java/target/pom.xml mms-ent/repo-amp/target/mms-java-client && rm -rf mms-ent/repo-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} && rm -rf mms-ent/share-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} + command: mkdir -p mms-ent/repo-amp/target/mms-java-client && mv mms-ent/repo-amp/target/generated-sources/swagger/java/target/*.jar mms-ent/repo-amp/target/generated-sources/swagger/java/pom.xml mms-ent/repo-amp/target/mms-java-client && rm -rf mms-ent/repo-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} && rm -rf mms-ent/share-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} - run: name: Prepare Store Artifacts @@ -64,7 +64,7 @@ jobs: command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true From f8b6569d9097c8d7687e773aac967d931fb4e5c3 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 1 Aug 2018 18:42:45 -0700 Subject: [PATCH 031/126] Adjusting swagger client generation --- mms-ent/repo-amp/assembly/mms-java-client.xml | 6 +++ .../assembly/mms-mathematica-client.xml | 6 +++ .../repo-amp/assembly/mms-python-client.xml | 6 +++ mms-ent/repo-amp/pom.xml | 51 +++++++++++++++---- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/mms-ent/repo-amp/assembly/mms-java-client.xml b/mms-ent/repo-amp/assembly/mms-java-client.xml index 9271d703..f7e16d60 100644 --- a/mms-ent/repo-amp/assembly/mms-java-client.xml +++ b/mms-ent/repo-amp/assembly/mms-java-client.xml @@ -12,4 +12,10 @@ ./ + + + ${project.basedir}/../../LICENSE + ./ + + diff --git a/mms-ent/repo-amp/assembly/mms-mathematica-client.xml b/mms-ent/repo-amp/assembly/mms-mathematica-client.xml index 85130c43..9074916f 100644 --- a/mms-ent/repo-amp/assembly/mms-mathematica-client.xml +++ b/mms-ent/repo-amp/assembly/mms-mathematica-client.xml @@ -13,4 +13,10 @@ ./ + + + ${project.basedir}/../../LICENSE + ./ + + diff --git a/mms-ent/repo-amp/assembly/mms-python-client.xml b/mms-ent/repo-amp/assembly/mms-python-client.xml index 6b07556a..b009a8d0 100644 --- a/mms-ent/repo-amp/assembly/mms-python-client.xml +++ b/mms-ent/repo-amp/assembly/mms-python-client.xml @@ -12,4 +12,10 @@ ./ + + + ${project.basedir}/../../LICENSE + ./ + + diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 872a92bf..bbffbb1a 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -284,7 +284,7 @@ java8-localdatetime gov.nasa.jpl.mms mms-java-client - ${parent.version} + ${project.parent.version} true ${swagger.codegen.target}/java @@ -298,6 +298,10 @@ ${swagger.codegen.yaml} python + + mms-python-client + ${project.parent.version} + ${swagger.codegen.target}/python @@ -345,21 +349,48 @@ maven-assembly-plugin - - mms - - assembly/mms-java-client.xml - assembly/mms-python-client.xml - assembly/mms-mathematica-client.xml - - - make-assembly + make-assembly-java-client + package + + single + + + + assembly/mms-java-client.xml + + mms-java-client + false + + + + make-assembly-python-client package single + + + assembly/mms-python-client.xml + + mms-python-client + false + + + + make-assembly-mathematica-client + package + + single + + + + assembly/mms-mathematica-client.xml + + mms-mathematica-client + false + From c380811006e4270edbe92116506cf9d91cd45524 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 1 Aug 2018 18:51:56 -0700 Subject: [PATCH 032/126] Make branch threads lowest priority --- .../main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java index 7b0f521c..41011b8e 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java @@ -93,6 +93,8 @@ public BranchTask(String projectId, String srcId, String createdString, String e private JsonObject createBranch() { + Thread.currentThread().setPriority(Thread.MIN_PRIORITY); + timer = new Timer(); JsonObject created = JsonUtil.buildFromString(createdString); From b76ca8ff974a1791a59509618a900d64dc260903 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 2 Aug 2018 13:49:34 -0700 Subject: [PATCH 033/126] Add repository --- mms-ent/repo-amp/pom.xml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index b48af0ff..5dd28f95 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -18,6 +18,17 @@ ${basedir}/src/main/amp/web/mms/mms.swagger.yaml + + + sonatype + Sonatype Groups + https://oss.sonatype.org/content/groups/public/ + + + spring + Spring Maven Repository + http://repo.spring.io/plugins-release/ + alfresco-public https://artifacts.alfresco.com/nexus/content/groups/public @@ -29,17 +40,6 @@ true - - - activiti-private-repository - https://artifacts.alfresco.com/nexus/content/repositories/activiti-enterprise-releases - - - - sonatype - Sonatype Groups - https://oss.sonatype.org/content/groups/public/ - From 9606eaea4d786a7e1733aa32f268615c9cb77980 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 2 Aug 2018 17:06:04 -0700 Subject: [PATCH 034/126] Allow only one branch in the past at a time --- .../nasa/jpl/view_repo/util/CommitUtil.java | 32 ++++++++++++++----- .../jpl/view_repo/util/QueueRejector.java | 15 +++++++++ .../view_repo/webscripts/WorkspacesPost.java | 5 ++- .../02__commits.robot | 2 +- 4 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index b6a61386..6502ba5f 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -10,9 +10,12 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -80,6 +83,8 @@ public class CommitUtil { private static String user = null; private static HazelcastInstance hzInstance = null; + private static BlockingQueue blockingQueue = new ArrayBlockingQueue<>(1); + private static ExecutorService executor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.SECONDS, blockingQueue, new QueueRejector()); public static void setJmsConnection(JmsConnection jmsConnection) { if (logger.isInfoEnabled()) { @@ -820,21 +825,32 @@ public static synchronized JsonObject sendBranch(String projectId, JsonObject sr user = services.getNodeService().getProperty(person, ContentModel.PROP_EMAIL).toString(); } + BranchTask task = + new BranchTask(projectId, srcId, created.toString(), elasticId, isTag, source, commitId, user); + + created.addProperty("status", "creating"); + if (hasCommit) { - ExecutorService executor = Executors.newSingleThreadExecutor(); - executor - .submit(new BranchTask(projectId, srcId, created.toString(), elasticId, isTag, source, commitId, user)); - executor.shutdown(); + try { + executor.submit(task); + executor.shutdown(); + } catch (RejectedExecutionException e) { + created.addProperty("status", "rejected"); + if (logger.isDebugEnabled()) { + logger.debug(e); + } + } } else { initHazelcastQueue(String.format("%s-%s", projectId, createdId)); BlockingQueue queue = hzInstance.getQueue(String.format("%s-%s", projectId, createdId)); - BranchTask task = - new BranchTask(projectId, srcId, created.toString(), elasticId, isTag, source, commitId, user); try { queue.put(task); } catch (InterruptedException ie) { - logger.debug(String.format("Interrupted: %s", LogUtil.getStackTrace(ie))); + if (logger.isDebugEnabled()) { + logger.debug(String.format("Interrupted: %s", LogUtil.getStackTrace(ie))); + } + created.addProperty("status", "rejected"); Thread.currentThread().interrupt(); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java new file mode 100644 index 00000000..6cf62837 --- /dev/null +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java @@ -0,0 +1,15 @@ +package gov.nasa.jpl.view_repo.util; + +import java.util.concurrent.RejectedExecutionHandler; +import java.util.concurrent.ThreadPoolExecutor; + +public class QueueRejector implements RejectedExecutionHandler { + @Override + public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { + try { + executor.getQueue().put(r); + } catch (InterruptedException e) { + System.err.println(e.getMessage()); + } + } +} diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index 26745d40..2be0ba33 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -235,7 +235,6 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String wsJson.addProperty(Sjm.CREATOR, user); wsJson.addProperty(Sjm.MODIFIED, date); wsJson.addProperty(Sjm.MODIFIER, user); - wsJson.addProperty("status", "creating"); elasticId = emsNodeUtil.insertSingleElastic(wsJson); if (!NO_WORKSPACE_ID.equals(sourceWorkspaceId) && srcWs == null) { @@ -255,6 +254,10 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String CommitUtil.sendBranch(projectId, srcJson, wsJson, elasticId, isTag, JsonUtil.getOptString(jsonObject, "source", null), commitId, services); + if (wsJson.get("status").getAsString().equalsIgnoreCase("rejected")) { + status.setCode(HttpServletResponse.SC_SERVICE_UNAVAILABLE); + } + finalWorkspace = dstWs; } } diff --git a/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot b/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot index ea460f46..96aeb077 100644 --- a/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot +++ b/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot @@ -99,7 +99,7 @@ BranchFromBranchAndCheckCommits ${post_json} = Get File ${CURDIR}/../../JsonData/PostBranch2FromBranch1.json ${branch_2_json} = Post url=${ROOT}/projects/PA/refs data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${branch_2_json.status_code} ${200} - Sleep ${POST_DELAY_INDEXING} + Sleep ${BRANCH_DELAY_INDEXING} ${branch_1_json} = Get url=${ROOT}/projects/PA/refs/pa_branch_1/history ${branch_2_json} = Get url=${ROOT}/projects/PA/refs/pa_branch_2/history ${result} = Compare Json To Json ${branch_2_json.json()} ${branch_1_json.json()} From b05a18c8ea795baace9d01da9f851ddeacb5054e Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 6 Aug 2018 11:28:52 -0700 Subject: [PATCH 035/126] Limit branch in the past to single execution at a time --- mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml | 4 ++++ .../main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java | 4 ++-- .../java/gov/nasa/jpl/view_repo/util/QueueRejector.java | 7 ++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml index c5435bd3..0d79ae43 100644 --- a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml +++ b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml @@ -414,6 +414,8 @@ paths: $ref: "#/responses/NotFound" 500: $ref: "#/responses/InternalServerError" + 503: + $ref: "#/response/ServiceUnavailable" default: $ref: "#/responses/Default" /projects/{project_id}/refs/{ref_id}: @@ -1114,6 +1116,8 @@ responses: description: "Forbidden" InternalServerError: description: "Internal server error" + ServiceUnavailable: + description: "Service Unavailable" Default: description: "Unknown" definitions: diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index 6502ba5f..ac65c4f9 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -84,7 +84,7 @@ public class CommitUtil { private static HazelcastInstance hzInstance = null; private static BlockingQueue blockingQueue = new ArrayBlockingQueue<>(1); - private static ExecutorService executor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.SECONDS, blockingQueue, new QueueRejector()); + private static ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.SECONDS, blockingQueue, new QueueRejector()); public static void setJmsConnection(JmsConnection jmsConnection) { if (logger.isInfoEnabled()) { @@ -837,7 +837,7 @@ public static synchronized JsonObject sendBranch(String projectId, JsonObject sr } catch (RejectedExecutionException e) { created.addProperty("status", "rejected"); if (logger.isDebugEnabled()) { - logger.debug(e); + logger.debug(String.format("Rejected: %s", LogUtil.getStackTrace(e))); } } } else { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java index 6cf62837..a694e0d6 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/QueueRejector.java @@ -1,15 +1,12 @@ package gov.nasa.jpl.view_repo.util; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionHandler; import java.util.concurrent.ThreadPoolExecutor; public class QueueRejector implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { - try { - executor.getQueue().put(r); - } catch (InterruptedException e) { - System.err.println(e.getMessage()); - } + throw new RejectedExecutionException(); } } From 36f80f550e025f124e0617d65128f81668d51512 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 6 Aug 2018 11:37:39 -0700 Subject: [PATCH 036/126] Merge with develop --- .circleci/config.yml | 47 +++++++++++++++++----------------------- mms-ent/repo-amp/pom.xml | 5 ++++- 2 files changed, 24 insertions(+), 28 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8e95dd2d..9f676647 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,36 +15,26 @@ jobs: - run: name: Run Maven Build - command: cd mms-ent && sh mvnw install -Pbuild + command: cd mms-ent && sh mvnw install -Pbuild && sh mvnw install -f repo-amp/target/generated-sources/swagger/java/pom.xml - save_cache: paths: - ~/.m2 key: mms-{{ checksum "mms-ent/pom.xml" }} + - run: + name: Clean target directory + command: mkdir -p mms-ent/repo-amp/target/mms-java-client && mv mms-ent/repo-amp/target/generated-sources/swagger/java/target/*.jar mms-ent/repo-amp/target/generated-sources/swagger/java/pom.xml mms-ent/repo-amp/target/mms-java-client && rm -rf mms-ent/repo-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} && rm -rf mms-ent/share-amp/target/{amp,archive-tmp,classes,generated-sources,generated-test-sources,maven-archiver,maven-status,surefire-reports,test-classes} + - run: name: Prepare Store Artifacts command: mkdir -p tmp/artifacts - store_artifacts: - path: mms-ent/repo-amp/target/mms-amp-3.3.0-SNAPSHOT.amp - destination: tmp/artifacts/mms-amp-3.3.0-SNAPSHOT.amp - - - store_artifacts: - path: mms-ent/share-amp/target/mms-share-amp-3.3.0-SNAPSHOT.amp - destination: tmp/artifacts/mms-share-amp-3.3.0-SNAPSHOT.amp - - - store_artifacts: - path: mms-ent/repo-amp/target/mms-java-client-3.3.0-SNAPSHOT.zip - destination: tmp/artifacts/mms-java-client-3.3.0-SNAPSHOT.zip - - - store_artifacts: - path: mms-ent/repo-amp/target/mms-python-client-3.3.0-SNAPSHOT.zip - destination: tmp/artifacts/mms-python-client-3.3.0-SNAPSHOT.zip + path: mms-ent/repo-amp/target - store_artifacts: - path: mms-ent/repo-amp/target/mms-mathematica-client-3.3.0-SNAPSHOT.zip - destination: tmp/artifacts/mms-mathematica-client-3.3.0-SNAPSHOT.zip + path: mms-ent/share-amp/target - persist_to_workspace: root: mms-ent @@ -68,19 +58,22 @@ jobs: command: ./jfrog rt config --url $ARTIFACTORY_URL --user $ARTIFACTORY_USER --apikey $ARTIFACTORY_APIKEY --interactive false - run: name: Send mms-amp - command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms-share-amp - command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + - run: + name: Send mms java client + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms mathematica client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true deploy_release: <<: *defaults @@ -98,19 +91,19 @@ jobs: command: ./jfrog rt config --url $ARTIFACTORY_URL --user $ARTIFACTORY_USER --apikey $ARTIFACTORY_APIKEY --interactive false - run: name: Send mms-amp - command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms-share-amp - command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-share-amp/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-release-local/gov/nasa/jpl/mms/mms-share-amp/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-java-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-*.jar' libs-release-local/gov/nasa/jpl/mms/mms-java-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-python-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-python-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms mathematica client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-release-local/gov/nasa/jpl/mms/mms-mathematica-client/3.3.1-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true workflows: version: 2 diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index bbffbb1a..f1a9560a 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -282,9 +282,12 @@ true java8-localdatetime - gov.nasa.jpl.mms + org.openmbee.mms mms-java-client ${project.parent.version} + org.openmbee.mms.client + org.openmbee.mms.client.model + org.openmbee.mms.client.api true ${swagger.codegen.target}/java From 372be3ad8526de714496157e1f381a1f8b71356c Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 8 Aug 2018 12:00:06 -0700 Subject: [PATCH 037/126] Use tika for file type detection --- mms-ent/repo-amp/pom.xml | 6 ++++++ .../java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 872a92bf..0a832164 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -114,6 +114,12 @@ logging-interceptor 2.7.5 + + + org.apache.tika + tika-core + 1.18 + org.apache.chemistry.opencmis diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java index 8a5d7567..13478329 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java @@ -59,6 +59,7 @@ import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.apache.log4j.Logger; +import org.apache.tika.Tika; import org.springframework.extensions.webscripts.Status; import gov.nasa.jpl.view_repo.webscripts.AbstractJavaWebScript; @@ -677,10 +678,11 @@ public static EmsScriptNode updateOrCreateArtifact(String artifactId, Path fileP EmsScriptNode artifactNode; String finalType = null; + Tika tika = new Tika(); File content = filePath.toFile(); try { - finalType = Files.probeContentType(filePath); + finalType = tika.detect(filePath); } catch (Exception e) { if (logger.isDebugEnabled()) { logger.debug("updateOrCreateArtifact: ", e); From c2acb96da8d7c610c81ba0cf5d1a55769ee79d7a Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 8 Aug 2018 14:39:37 -0700 Subject: [PATCH 038/126] Add produces attribute in the swagger artifacts endpoints --- mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml index c5435bd3..94b04a24 100644 --- a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml +++ b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml @@ -769,6 +769,11 @@ paths: summary: "Get artifacts" description: "" operationId: "getArtifacts" + produces: + - image/png + - image/svg+xml + - application/pdf + - application/vnd.openxmlformats-officedocument.wordprocessingml.document parameters: - in: "query" name: "commitId" @@ -795,6 +800,11 @@ paths: summary: "Get artifact(s) in batch" description: "" operationId: "getArtifactsInBatch" + produces: + - image/png + - image/svg+xml + - application/pdf + - application/vnd.openxmlformats-officedocument.wordprocessingml.document parameters: - in: "body" name: "body" From 50efa7356e1fd2437fc4e405e2ab99588d292f79 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 9 Aug 2018 11:25:49 -0700 Subject: [PATCH 039/126] almost complete add and remove logic --- mms-ent/clean.sh | 1 + .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 84 +++++---- .../jpl/view_repo/webscripts/MovePost.java | 9 +- .../robotframework/JsonData/MoveOwner.json | 6 +- .../JsonData/PostMoveElements.json | 36 ++-- .../baseline/GetAllElementsForMove.json | 177 ++++++++++++++++++ .../suites/01__crud/04__move_post.robot | 8 +- 7 files changed, 259 insertions(+), 62 deletions(-) create mode 100644 mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json diff --git a/mms-ent/clean.sh b/mms-ent/clean.sh index 719b3634..d2899c10 100755 --- a/mms-ent/clean.sh +++ b/mms-ent/clean.sh @@ -65,6 +65,7 @@ if [[ "$OSTYPE" == "darwin" ]]; then dropdb -U $dbuser _MountCommit dropdb -U $dbuser _CollaboratorProject dropdb -U $dbuser _CompleteModelGet + dropdb -U $dbuser _MoveModel dropdb -U $dbuser $usedb createdb -U $dbuser $usedb psql -U $dbuser -f ./repo-amp/src/main/resources/mms.sql $usedb diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index a98490d0..e51730d4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -34,6 +34,7 @@ import gov.nasa.jpl.view_repo.db.GraphInterface.DbEdgeTypes; import gov.nasa.jpl.view_repo.db.GraphInterface.DbNodeTypes; import org.json.JSONObject; +import com.google.gson.JsonParser; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -1251,47 +1252,60 @@ private Map getQualifiedInformationForElement(JsonObject element return result; } - public List> processMove(JsonArray moveData) throws IOException { - List> elements = new ArrayList>(); - Map froms = new HashMap<>(); + public Map processMove(JsonArray moveData) throws IOException { + Map elements = new HashMap<>(); + Set keys = new HashSet<>(); + Map toRemove = new HashMap<>(); + Map toAdd = new HashMap<>(); for (int i = 0; i < moveData.size(); i++) { - String fromId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from"); + String srcId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from"); + String destId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "to"); String id = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID); - if (froms.containsKey(fromId)) { - froms.get(fromId).put(Integer.parseInt(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "index")), id); - }else{ + if (toAdd.containsKey(destId)) { + toAdd.get(destId) + .put(Integer.parseInt(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "index")), id); + } else { Map indexed = new TreeMap<>(); indexed.put(Integer.parseInt(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "index")), id); - froms.put(fromId, indexed); + toAdd.put(destId, indexed); + } + if (toRemove.containsKey(srcId)) { + toRemove.get(srcId).add(id); + } else { + List indexed = new ArrayList<>(); + indexed.add(id); + toRemove.put(srcId, indexed); + } + keys.add(srcId); + keys.add(destId); + } + JsonArray modified = getArtifactsBySysmlids(keys, false, false ); + for(int i = 0; i + //Map> + for (Map.Entry entry : toRemove.entrySet()) { + List value = entry.getValue(); + String key = entry.getKey(); + JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); + JsonArray removed = new JsonArray(); + + for (int i = 0; i < ownedAttributeIdsToRemove.size(); i++) { + if (!value.contains(ownedAttributeIdsToRemove.get(i).getAsString())){ + removed.add(ownedAttributeIdsToRemove.get(i)); + } } + elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, removed); } -// for (Map.Entry entry : froms.entrySet()) { -// String key = entry.getKey(); -// Map childMap = entry.getValue(); -// -// for (Map.Entry entry2 : childMap.entrySet()) {} -// JsonObject from = eh.getElementByElasticId(pgh.getElasticIdFromSysmlId(key), projectId); -// JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(from, Sjm.OWNEDATTRIBUTEIDS); -// for(String remove: value){ -// if(ownedAttributeIdsToRemove.contains(remove)){ -// -// } -// -// -// } -// } - - // for (int i = 0; i < moveData.size(); i++) { - // try { - // String id = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID); - // //JsonObject to = eh.getElementByElasticId(pgh.getElasticIdFromSysmlId(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), Sjm.SYSMLID)), projectId); - // JsonObject from = eh.getElementByElasticId( - // pgh.getElasticIdFromSysmlId(JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from")), - // projectId); - // } catch (IOException e) { - // e.printStackTrace(); - // } - // } + JsonObject o = new JsonParser().parse("{\"a\": \"A\"}").getAsJsonObject(); + + for (Map.Entry entry : toAdd.entrySet()) { + Map value = entry.getValue(); + String key = entry.getKey(); + //for(Map.Entry add : value.entrySet()) {}} + return elements; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index d714bc3a..d88b4bef 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -117,6 +117,11 @@ protected Map executeImplImpl(final WebScriptRequest req, final String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); // call move logic + try { + JsonObject move = createDeltaForMove(req); + } catch (IOException e) { + e.printStackTrace(); + } result = handleElementPost(req, status, user, contentType); @@ -125,7 +130,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final return result; } - protected JsonObject createDeltaForMove(final WebScriptRequest req, final Status status, String user) + protected JsonObject createDeltaForMove(final WebScriptRequest req) throws IOException { JsonObject newElementsObject = new JsonObject(); JsonObject results; @@ -143,7 +148,7 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req, final Status if (logger.isDebugEnabled()) { logger.debug(String.format("Post Data: '%s'", postJson)); } - List> blah = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + Map blah = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); //model.put(Sjm.RES, createResponseJson diff --git a/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json b/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json index 2867b06c..4c12803f 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/MoveOwner.json @@ -3,9 +3,9 @@ { "_creator": "admin", "_modifier": "admin", - "id": "p", - "from": "b1", - "to": "b2", + "id": "propMove", + "from": "oldParent", + "to": "newParent", "index":"0" } ] diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json index ed1321d0..6f40de23 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json @@ -1,23 +1,23 @@ { // ownerId of a1 becomes pack2 and propertyType of ap1 becomes b2 "elements": [ { - "id": "pack1", + "id": "package1", "type": "Package", "ownerId": "MoveModel" }, { - "id": "pack2", + "id": "package2", "type": "Package", "ownerId": "MoveModel" }, { "documentation": "something", - "id": "b1", + "id": "oldParent", "ownedAttributeIds": [ - "p" + "propMove" ], "name": "org parent of p", - "ownerId": "pack1", + "ownerId": "package1", "type": "Class", "isDerived": false, "value": [ @@ -29,7 +29,7 @@ }, { "documentation": "else", - "id": "b2", + "id": "newParent", "ownedAttributeIds": [], "name": "new parent of p", "ownerId": "MoveModel", @@ -44,10 +44,10 @@ }, { "documentation": "else", - "id": "p1", - "assoicationId":"a1", + "id": "propMove", + "associationId":"a1", "name": "three hundred and one", - "ownerId": "b1", + "ownerId": "oldParent", "type": "Property", "isDerived": false, "value": [ @@ -61,19 +61,19 @@ "type": "Association", "id": "a1", "ownedEndIds": ["ap1"], - "ownerId": "pack1" + "ownerId": "package1" }, { "type": "Property", "id": "ap1", - "propertyType": "b1", + "propertyType": "oldParent", "ownerId": "a1" }, { "documentation": "else", - "id": "p2", + "id": "propMove2", "name": "three hundred and one", - "ownerId": "b1", + "ownerId": "oldParent", "type": "Property", "isDerived": false, "value": [ @@ -85,9 +85,9 @@ }, { "documentation": "else", - "id": "p3", + "id": "propMove3", "name": "three hundred and one", - "ownerId": "b1", + "ownerId": "oldParent", "type": "Property", "isDerived": false, "value": [ @@ -99,9 +99,9 @@ }, { "documentation": "else", - "id": "p4", + "id": "propMove4", "name": "three hundred and one", - "ownerId": "b1", + "ownerId": "oldParent", "type": "Property", "isDerived": false, "value": [ @@ -111,7 +111,5 @@ } ] } - - ] } diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json new file mode 100644 index 00000000..1f9e8a9f --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json @@ -0,0 +1,177 @@ +{ + "elements": [ + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "associationId": "a1", + "documentation": "else", + "id": "propMove", + "isDerived": false, + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "ap1", + "ownerId": "a1", + "propertyType": "oldParent", + "type": "Property" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "else", + "id": "propMove4", + "isDerived": false, + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "pack2", + "ownerId": "MoveModel", + "type": "Package" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "something", + "id": "oldParent", + "isDerived": false, + "name": "org parent of p", + "ownedAttributeIds": [ + "propMove" + ], + "ownerId": "pack1", + "type": "Class", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "else", + "id": "propMove2", + "isDerived": false, + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "else", + "id": "propMove3", + "isDerived": false, + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "pack1", + "ownerId": "MoveModel", + "type": "Package" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "else", + "id": "newParent", + "isDerived": false, + "name": "new parent of p", + "ownedAttributeIds": [], + "ownerId": "MoveModel", + "type": "Class", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "a1", + "ownedEndIds": [ + "ap1" + ], + "ownerId": "pack1", + "type": "Association" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "MoveModel", + "name": "Project", + "type": "Project" + } + ] +} \ No newline at end of file diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index e1b963d1..88170636 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -14,13 +14,15 @@ PostNewElementsToMove [Documentation] "Post elements to the newly created project and organization." [Tags] crud critical 010402 ${post_json} = Get File ${CURDIR}/../../JsonData/PostMoveElements.json - ${result} = Post url=${ROOT}/projects/CompleteModelGet/refs/master/elements data=${post_json} headers=&{REQ_HEADER} + ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/elements data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} Sleep ${POST_DELAY_INDEXING} + ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds + Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${commit} = Get Commit Id ${result.json()} Set Global Variable ${commit} -GetAllElementsForMove +GetAllElementsForMove #fix "pack 1" [Documentation] "Get All the elements in the model" [Tags] mounts critical 010403 ${result} = Get url=${ROOT}/projects/MoveModel/refs/master/elements headers=&{REQ_HEADER} @@ -34,7 +36,7 @@ ChangeOwner [Documentation] "Change owner of p from b1 to b2. Remove pId from b1's list of ownedAttributeIds. Insert pId to b2's list of ownedAttributeIds at i" [Tags] crud critical 010404 ${post_json} = Get File ${CURDIR}/../../JsonData/MoveOwner.json - ${result} = Post url=${ROOT}/projects/CompleteModelGet/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} + ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} #GetAllElementsInModelFromCommit From 826725108ece6938a44f38cfbfa70c683e26fbb8 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 9 Aug 2018 12:07:36 -0700 Subject: [PATCH 040/126] complete add and remove without testing --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index e51730d4..51702590 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1279,8 +1279,8 @@ public Map processMove(JsonArray moveData) throws IOExceptio keys.add(srcId); keys.add(destId); } - JsonArray modified = getArtifactsBySysmlids(keys, false, false ); - for(int i = 0; i processMove(JsonArray moveData) throws IOExceptio for (Map.Entry entry : toRemove.entrySet()) { List value = entry.getValue(); String key = entry.getKey(); - JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); + JsonArray ownedAttributeIdsToRemove = + JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); JsonArray removed = new JsonArray(); for (int i = 0; i < ownedAttributeIdsToRemove.size(); i++) { - if (!value.contains(ownedAttributeIdsToRemove.get(i).getAsString())){ + if (!value.contains(ownedAttributeIdsToRemove.get(i).getAsString())) { removed.add(ownedAttributeIdsToRemove.get(i)); } } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, removed); } - JsonObject o = new JsonParser().parse("{\"a\": \"A\"}").getAsJsonObject(); - for (Map.Entry entry : toAdd.entrySet()) { - Map value = entry.getValue(); + Map value = entry.getValue(); String key = entry.getKey(); - //for(Map.Entry add : value.entrySet()) {}} - + JsonArray ownedAttributeIdsToAdd = + JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); + for (Map.Entry add : value.entrySet()) { + Integer index = add.getKey(); + String id = add.getValue(); + ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); + } + elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, ownedAttributeIdsToAdd); + } return elements; - } public boolean isDeleted(String sysmlid) { From 590f04443cdae55040a09fc125ef910944ce097e Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 9 Aug 2018 14:24:35 -0700 Subject: [PATCH 041/126] Adding keywords for refs --- mms-ent/repo-amp/pom.xml | 9 +++++---- .../src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java | 1 + .../nasa/jpl/view_repo/webscripts/WorkspacesPost.java | 6 ++++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 3e7c4e90..98cf2022 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -290,7 +290,7 @@ java8-localdatetime org.openmbee.mms mms-java-client - ${project.parent.version} + ${parent.version} org.openmbee.mms.client org.openmbee.mms.client.model org.openmbee.mms.client.api @@ -308,8 +308,9 @@ ${swagger.codegen.yaml} python - mms-python-client - ${project.parent.version} + mms_python_client + mms_python_client + ${parent.version} ${swagger.codegen.target}/python @@ -383,7 +384,7 @@ assembly/mms-python-client.xml - mms-python-client + mms_python_client false diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java index d540b245..3af9918b 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java @@ -84,6 +84,7 @@ public class Sjm { public static final String ISREADONLY = "isReadOnly"; public static final String ISSTATIC = "isStatic"; public static final String ISUNIQUE = "isUnique"; + public static final String KEYWORDS = "keywords"; public static final String LOWERVALUE = "lowerValue"; public static final String MDEXTENSIONSIDS = "mdExtensionsIds"; public static final String MEMBERENDIDS = "memberEndIds"; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index 26745d40..63b11380 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -188,6 +188,8 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String JsonObject srcJson = new JsonObject(); String workspaceName = null; String desc = null; + boolean active = false; + JsonArray keywords = new JsonArray(); String elasticId = null; boolean isTag = false; String permission = "read"; // Default is public read permission @@ -206,6 +208,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String workspaceName = JsonUtil.getOptString(wsJson, "name"); // user or auto-generated name, ems:workspace_name isTag = JsonUtil.getOptString(wsJson, "type", "Branch").equals("Tag"); desc = JsonUtil.getOptString(wsJson, "description"); + keywords = JsonUtil.getOptArray(wsJson, "keywords"); permission = JsonUtil.getOptString(wsJson, "permission", "read"); // "read" or "write" } else { sourceWorkspaceId = sourceWorkId; @@ -231,6 +234,9 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String if (desc != null && !desc.isEmpty()) { wsJson.addProperty(Sjm.DESCRIPTION, desc); } + if (keywords.size() > 0) { + wsJson.add(Sjm.KEYWORDS, keywords); + } wsJson.addProperty(Sjm.CREATED, date); wsJson.addProperty(Sjm.CREATOR, user); wsJson.addProperty(Sjm.MODIFIED, date); From 155d0167bbed380600623b81206b33f9356462ba Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 9 Aug 2018 14:37:08 -0700 Subject: [PATCH 042/126] complete logic, refactor of modelPost for movePost on going --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 46 +++++- .../jpl/view_repo/webscripts/MovePost.java | 145 ++++++------------ .../JsonData/PostMoveElements.json | 2 +- 3 files changed, 87 insertions(+), 106 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 51702590..9de47fd9 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1252,11 +1252,14 @@ private Map getQualifiedInformationForElement(JsonObject element return result; } - public Map processMove(JsonArray moveData) throws IOException { + public JsonArray processMove(JsonArray moveData) throws IOException { Map elements = new HashMap<>(); Set keys = new HashSet<>(); Map toRemove = new HashMap<>(); + Map updateOwner = new HashMap<>(); Map toAdd = new HashMap<>(); + Set dbnt = new HashSet<>(); + dbnt.add(DbNodeTypes.PACKAGE); for (int i = 0; i < moveData.size(); i++) { String srcId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from"); String destId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "to"); @@ -1276,6 +1279,10 @@ public Map processMove(JsonArray moveData) throws IOExceptio indexed.add(id); toRemove.put(srcId, indexed); } + if (!srcId.equals(destId)) { + keys.add(id); + updateOwner.put(id, destId); + } keys.add(srcId); keys.add(destId); } @@ -1284,8 +1291,33 @@ public Map processMove(JsonArray moveData) throws IOExceptio String sysmlid = JsonUtil.getOptString(modified.get(i).getAsJsonObject(), Sjm.SYSMLID); elements.put(sysmlid, modified.get(i).getAsJsonObject()); } - //Map - //Map> + for (Map.Entry entry : updateOwner.entrySet()) { + String value = entry.getValue(); + String key = entry.getKey(); + if(elements.get(key).getAsJsonObject().has(Sjm.ASSOCIATIONENDID)){ + String associationId = elements.get(key).getAsJsonObject().get(Sjm.ASSOCIATIONENDID).getAsString(); + String ownerParentPackage = pgh.getImmediateParentOfType(value, DbEdgeTypes.CONTAINMENT, dbnt); + JsonObject associationObj = getNodeBySysmlid(associationId); + associationObj.addProperty(Sjm.OWNERID, ownerParentPackage); + elements.put(associationObj.get(Sjm.SYSMLID).getAsString(),associationObj); + //referenced element's typeId to be b2 + if(associationObj.has(Sjm.OWNEDENDIDS) && associationObj.get(Sjm.OWNEDENDIDS).getAsJsonArray().size() > 0){ + JsonArray ownedEndIds = associationObj.get(Sjm.OWNEDENDIDS).getAsJsonArray(); + for(int i = 0; i entry : toRemove.entrySet()) { List value = entry.getValue(); String key = entry.getKey(); @@ -1308,11 +1340,17 @@ public Map processMove(JsonArray moveData) throws IOExceptio for (Map.Entry add : value.entrySet()) { Integer index = add.getKey(); String id = add.getValue(); + // Set requires a jsonObject... ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, ownedAttributeIdsToAdd); } - return elements; + JsonArray toProcess = new JsonArray(); + for (Map.Entry entry : elements.entrySet()) { + toProcess.add(entry.getValue()); + + } + return toProcess; } public boolean isDeleted(String sysmlid) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index d88b4bef..60d0c892 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -118,7 +118,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final // call move logic try { - JsonObject move = createDeltaForMove(req); + JsonObject move = createDeltaForMove(req, user, status); } catch (IOException e) { e.printStackTrace(); } @@ -130,7 +130,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final return result; } - protected JsonObject createDeltaForMove(final WebScriptRequest req) + protected JsonObject createDeltaForMove(final WebScriptRequest req, String user, final Status status) throws IOException { JsonObject newElementsObject = new JsonObject(); JsonObject results; @@ -138,36 +138,10 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req) String refId = getRefId(req); String projectId = getProjectId(req); //Map model = new HashMap<>(); - - - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - - try { - JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); - - if (logger.isDebugEnabled()) { - logger.debug(String.format("Post Data: '%s'", postJson)); - } - Map blah = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); - //model.put(Sjm.RES, createResponseJson - } - return newElementsObject; - - } - - protected Map handleElementPost(final WebScriptRequest req, final Status status, String user, - String contentType) { - JsonObject newElementsObject = new JsonObject(); - JsonObject results; - boolean extended = Boolean.parseBoolean(req.getParameter("extended")); - boolean withChildViews = Boolean.parseBoolean(req.getParameter("childviews")); - boolean overwriteJson = Boolean.parseBoolean(req.getParameter("overwrite")); - - String refId = getRefId(req); - String projectId = getProjectId(req); Map model = new HashMap<>(); + boolean withChildViews = false; + boolean extended = false; + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); @@ -178,83 +152,52 @@ protected Map handleElementPost(final WebScriptRequest req, fina logger.debug(String.format("Post Data: '%s'", postJson)); } - this.populateSourceApplicationFromJson(postJson); Set oldElasticIds = new HashSet<>(); - - emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); - //results = postJson.get(Sjm.MOVES).getAsJsonArray(); - - // String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); - - String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); - + JsonArray moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); results = emsNodeUtil - .processPostJson(postJson.get(Sjm.MOVES).getAsJsonArray(), user, oldElasticIds, overwriteJson, - this.requestSourceApplication, comment, Sjm.MOVES); - - // String commitId = results.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); - // - // int added = JsonUtil.getOptArray(results, "addedElements").size(); - // int updated = JsonUtil.getOptArray(results, "updatedElements").size(); - // int deleted = JsonUtil.getOptArray(results, "deletedElements").size(); - // - // if (added + updated + deleted == 0) { - // JsonObject rejected = new JsonObject(); - // rejected.addProperty(Sjm.CREATOR, user); - // rejected.add(Sjm.ELEMENTS, new JsonArray()); - // JsonArray rejectedElements = JsonUtil.getOptArray(results, "rejectedElements"); - // rejected.add(Sjm.REJECTED, rejectedElements); - // model.put(Sjm.RES, rejected); - // } else if (CommitUtil - // .sendDeltas(results, projectId, refId, requestSourceApplication, services, withChildViews, false)) { - // if (!oldElasticIds.isEmpty()) { - // emsNodeUtil.updateElasticRemoveRefs(oldElasticIds, "element"); - // } - // Map commitObject = emsNodeUtil.getGuidAndTimestampFromElasticId(commitId); - // - // if (withChildViews) { - // JsonArray array = results.get(NEWELEMENTS).getAsJsonArray(); - // for (int i = 0; i < array.size(); i++) { - // array.set(i, emsNodeUtil.addChildViews(array.get(i).getAsJsonObject())); - // } - // } - // - // newElementsObject.add(Sjm.ELEMENTS, extended ? - // emsNodeUtil.addExtendedInformation(filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)) - // : filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)); - // if (results.has("rejectedElements")) { - // newElementsObject.add(Sjm.REJECTED, results.get("rejectedElements")); - // } - // newElementsObject.addProperty(Sjm.COMMITID, commitId); - // newElementsObject.addProperty(Sjm.TIMESTAMP, commitObject.get(Sjm.TIMESTAMP)); - // newElementsObject.addProperty(Sjm.CREATOR, user); - // - // if (prettyPrint) { - // Gson gson = new GsonBuilder().setPrettyPrinting().create(); - // model.put(Sjm.RES, gson.toJson(newElementsObject)); - // } else { - // model.put(Sjm.RES, newElementsObject); - // } - // - // status.setCode(responseStatus.getCode()); - // } else { - // log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, - // "Commit failed, please check server logs for failed items"); - // model.put(Sjm.RES, createResponseJson()); - // } + .processPostJson(moved, + user, oldElasticIds, false, + this.requestSourceApplication, "", Sjm.ELEMENT); + String commitId = results.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); + + int added = JsonUtil.getOptArray(results, "addedElements").size(); + int updated = JsonUtil.getOptArray(results, "updatedElements").size(); + int deleted = JsonUtil.getOptArray(results, "deletedElements").size(); + + if (added + updated + deleted == 0) { + JsonObject rejected = new JsonObject(); + rejected.addProperty(Sjm.CREATOR, user); + rejected.add(Sjm.ELEMENTS, new JsonArray()); + JsonArray rejectedElements = JsonUtil.getOptArray(results, "rejectedElements"); + rejected.add(Sjm.REJECTED, rejectedElements); + model.put(Sjm.RES, rejected); + } else if (CommitUtil + .sendDeltas(results, projectId, refId, requestSourceApplication, services, withChildViews, false)) { + if (!oldElasticIds.isEmpty()) { + emsNodeUtil.updateElasticRemoveRefs(oldElasticIds, "element"); + } + Map commitObject = emsNodeUtil.getGuidAndTimestampFromElasticId(commitId); + + newElementsObject.addProperty(Sjm.COMMITID, commitId); + newElementsObject.addProperty(Sjm.TIMESTAMP, commitObject.get(Sjm.TIMESTAMP)); + newElementsObject.addProperty(Sjm.CREATOR, user); + + if (prettyPrint) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + model.put(Sjm.RES, gson.toJson(newElementsObject)); + } else { + model.put(Sjm.RES, newElementsObject); + } + + status.setCode(responseStatus.getCode()); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); - model.put(Sjm.RES, createResponseJson()); - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - model.put(Sjm.RES, createResponseJson()); + //model.put(Sjm.RES, createResponseJson } + return newElementsObject; - status.setCode(responseStatus.getCode()); - - return model; - } + }} @Override protected boolean validateRequest(WebScriptRequest req, Status status) { String elementId = req.getServiceMatch().getTemplateVars().get("elementid"); diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json index 6f40de23..a59012b4 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json @@ -66,7 +66,7 @@ { "type": "Property", "id": "ap1", - "propertyType": "oldParent", + "typeId": "oldParent", "ownerId": "a1" }, { From c7c8cc0a764ae0e00581c9e152a3c1d4289733ac Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Fri, 10 Aug 2018 07:31:34 -0700 Subject: [PATCH 043/126] fix for try catch in movePost --- .../java/gov/nasa/jpl/view_repo/webscripts/MovePost.java | 8 ++++---- .../robotframework/suites/01__crud/04__move_post.robot | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index 60d0c892..624a3e31 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -155,9 +155,7 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req, String user, Set oldElasticIds = new HashSet<>(); JsonArray moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); results = emsNodeUtil - .processPostJson(moved, - user, oldElasticIds, false, - this.requestSourceApplication, "", Sjm.ELEMENT); + .processPostJson(moved, user, oldElasticIds, false, this.requestSourceApplication, "", Sjm.ELEMENT); String commitId = results.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); int added = JsonUtil.getOptArray(results, "addedElements").size(); @@ -191,13 +189,15 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req, String user, status.setCode(responseStatus.getCode()); + } } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); //model.put(Sjm.RES, createResponseJson } return newElementsObject; + } + - }} @Override protected boolean validateRequest(WebScriptRequest req, Status status) { String elementId = req.getServiceMatch().getTemplateVars().get("elementid"); diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index 88170636..633692db 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -22,7 +22,7 @@ PostNewElementsToMove ${commit} = Get Commit Id ${result.json()} Set Global Variable ${commit} -GetAllElementsForMove #fix "pack 1" +GetAllElementsForMove [Documentation] "Get All the elements in the model" [Tags] mounts critical 010403 ${result} = Get url=${ROOT}/projects/MoveModel/refs/master/elements headers=&{REQ_HEADER} From fad7c2b6287e1e545e4329421b6f923207efb8f8 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Fri, 10 Aug 2018 08:55:24 -0700 Subject: [PATCH 044/126] baseline functional --- mms-ent/clean.sh | 9 +- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 19 ++- .../jpl/view_repo/webscripts/MovePost.java | 17 ++- .../robotframework/JsonData/MovePosition.json | 28 ++++ .../JsonData/PostMoveElements.json | 5 +- .../baseline/GetAllElementsForMove.json | 130 +++++++++++++----- .../suites/01__crud/04__move_post.robot | 27 ++-- 7 files changed, 165 insertions(+), 70 deletions(-) create mode 100644 mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json diff --git a/mms-ent/clean.sh b/mms-ent/clean.sh index d2899c10..5929a9cf 100755 --- a/mms-ent/clean.sh +++ b/mms-ent/clean.sh @@ -128,7 +128,13 @@ expect "*Password*" send "$password\r" expect eof EOD - + $EXPECT < entry : updateOwner.entrySet()) { String value = entry.getValue(); String key = entry.getKey(); - if(elements.get(key).getAsJsonObject().has(Sjm.ASSOCIATIONENDID)){ + if (elements.get(key).getAsJsonObject().has(Sjm.ASSOCIATIONENDID)) { String associationId = elements.get(key).getAsJsonObject().get(Sjm.ASSOCIATIONENDID).getAsString(); String ownerParentPackage = pgh.getImmediateParentOfType(value, DbEdgeTypes.CONTAINMENT, dbnt); JsonObject associationObj = getNodeBySysmlid(associationId); associationObj.addProperty(Sjm.OWNERID, ownerParentPackage); - elements.put(associationObj.get(Sjm.SYSMLID).getAsString(),associationObj); + elements.put(associationObj.get(Sjm.SYSMLID).getAsString(), associationObj); //referenced element's typeId to be b2 - if(associationObj.has(Sjm.OWNEDENDIDS) && associationObj.get(Sjm.OWNEDENDIDS).getAsJsonArray().size() > 0){ + if (associationObj.has(Sjm.OWNEDENDIDS) + && associationObj.get(Sjm.OWNEDENDIDS).getAsJsonArray().size() > 0) { JsonArray ownedEndIds = associationObj.get(Sjm.OWNEDENDIDS).getAsJsonArray(); - for(int i = 0; i add : value.entrySet()) { Integer index = add.getKey(); String id = add.getValue(); // Set requires a jsonObject... - ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); + if (ownedAttributeIdsToAdd.size() > 0) { + ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); + } else { + ownedAttributeIdsToAdd.add(id); + + } } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, ownedAttributeIdsToAdd); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index 624a3e31..5a8d6af1 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -117,21 +117,15 @@ protected Map executeImplImpl(final WebScriptRequest req, final String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); // call move logic - try { - JsonObject move = createDeltaForMove(req, user, status); - } catch (IOException e) { - e.printStackTrace(); - } - result = handleElementPost(req, status, user, contentType); + result = createDeltaForMove(req, user, status); printFooter(user, logger, timer); return result; } - protected JsonObject createDeltaForMove(final WebScriptRequest req, String user, final Status status) - throws IOException { + protected Map createDeltaForMove(final WebScriptRequest req, String user, final Status status){ JsonObject newElementsObject = new JsonObject(); JsonObject results; @@ -193,8 +187,13 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req, String user, } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); //model.put(Sjm.RES, createResponseJson + }catch (Exception e) { + logger.error(String.format("%s", LogUtil.getStackTrace(e))); + model.put(Sjm.RES, createResponseJson()); } - return newElementsObject; + + status.setCode(responseStatus.getCode()); + return model; } diff --git a/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json b/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json new file mode 100644 index 00000000..57cb581b --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json @@ -0,0 +1,28 @@ +{ + "moves": [ + { + "_creator": "admin", + "_modifier": "admin", + "id": "propMove2", + "from": "oldParent", + "to": "oldParent", + "index":"3" + }, + { + "_creator": "admin", + "_modifier": "admin", + "id": "propMove3", + "from": "oldParent", + "to": "oldParent", + "index":"1" + }, + { + "_creator": "admin", + "_modifier": "admin", + "id": "propMove4", + "from": "oldParent", + "to": "newParent", + "index":"0" + } + ] +} diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json index a59012b4..09b495c9 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json @@ -14,7 +14,10 @@ "documentation": "something", "id": "oldParent", "ownedAttributeIds": [ - "propMove" + "propMove", + "propMove2", + "propMove3", + "propMove4" ], "name": "org parent of p", "ownerId": "package1", diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json index 1f9e8a9f..e6b2c745 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json @@ -6,9 +6,18 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "associationId": "a1", + "id": "package2", + "ownerId": "MoveModel", + "type": "Package" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", "documentation": "else", - "id": "propMove", + "id": "propMove3", "isDerived": false, "name": "three hundred and one", "ownerId": "oldParent", @@ -26,10 +35,9 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "id": "ap1", - "ownerId": "a1", - "propertyType": "oldParent", - "type": "Property" + "id": "package1", + "ownerId": "MoveModel", + "type": "Package" }, { "_creator": "admin", @@ -38,11 +46,12 @@ "_projectId": "MoveModel", "_refId": "master", "documentation": "else", - "id": "propMove4", + "id": "newParent", "isDerived": false, - "name": "three hundred and one", - "ownerId": "oldParent", - "type": "Property", + "name": "new parent of p", + "ownedAttributeIds": [], + "ownerId": "MoveModel", + "type": "Class", "value": [ { "string": "dlam_string", @@ -56,9 +65,10 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "id": "pack2", - "ownerId": "MoveModel", - "type": "Package" + "id": "ap1", + "ownerId": "a1", + "type": "Property", + "typeId": "oldParent" }, { "_creator": "admin", @@ -73,7 +83,7 @@ "ownedAttributeIds": [ "propMove" ], - "ownerId": "pack1", + "ownerId": "package1", "type": "Class", "value": [ { @@ -88,8 +98,9 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", + "associationId": "a1", "documentation": "else", - "id": "propMove2", + "id": "propMove", "isDerived": false, "name": "three hundred and one", "ownerId": "oldParent", @@ -101,6 +112,19 @@ } ] }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "a1", + "ownedEndIds": [ + "ap1" + ], + "ownerId": "package1", + "type": "Association" + }, { "_creator": "admin", "_editable": true, @@ -108,7 +132,7 @@ "_projectId": "MoveModel", "_refId": "master", "documentation": "else", - "id": "propMove3", + "id": "propMove2", "isDerived": false, "name": "three hundred and one", "ownerId": "oldParent", @@ -120,16 +144,6 @@ } ] }, - { - "_creator": "admin", - "_editable": true, - "_modifier": "admin", - "_projectId": "MoveModel", - "_refId": "master", - "id": "pack1", - "ownerId": "MoveModel", - "type": "Package" - }, { "_creator": "admin", "_editable": true, @@ -137,12 +151,11 @@ "_projectId": "MoveModel", "_refId": "master", "documentation": "else", - "id": "newParent", + "id": "propMove4", "isDerived": false, - "name": "new parent of p", - "ownedAttributeIds": [], - "ownerId": "MoveModel", - "type": "Class", + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", "value": [ { "string": "dlam_string", @@ -151,17 +164,32 @@ ] }, { + "URI": null, + "_appliedStereotypeIds": [], "_creator": "admin", "_editable": true, + "_isGroup": false, "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "id": "a1", - "ownedEndIds": [ - "ap1" - ], - "ownerId": "pack1", - "type": "Association" + "appliedStereotypeInstanceId": null, + "clientDependencyIds": [], + "documentation": "", + "elementImportIds": [], + "id": "view_instances_bin_MoveModel", + "mdExtensionsIds": [], + "name": "View Instances Bin", + "nameExpression": null, + "ownerId": "MoveModel", + "packageImportIds": [], + "packageMergeIds": [], + "profileApplicationIds": [], + "supplierDependencyIds": [], + "syncElementId": null, + "templateBindingIds": [], + "templateParameterId": null, + "type": "Package", + "visibility": "public" }, { "_creator": "admin", @@ -172,6 +200,34 @@ "id": "MoveModel", "name": "Project", "type": "Project" + }, + { + "URI": null, + "_appliedStereotypeIds": [], + "_creator": "admin", + "_editable": true, + "_isGroup": false, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "appliedStereotypeInstanceId": null, + "clientDependencyIds": [], + "documentation": "", + "elementImportIds": [], + "id": "holding_bin_MoveModel", + "mdExtensionsIds": [], + "name": "Holding Bin", + "nameExpression": null, + "ownerId": "MoveModel", + "packageImportIds": [], + "packageMergeIds": [], + "profileApplicationIds": [], + "supplierDependencyIds": [], + "syncElementId": null, + "templateBindingIds": [], + "templateParameterId": null, + "type": "Package", + "visibility": "public" } ] } \ No newline at end of file diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index 633692db..f1cc16bb 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -38,20 +38,15 @@ ChangeOwner ${post_json} = Get File ${CURDIR}/../../JsonData/MoveOwner.json ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} + ${compare_result} = Compare JSON ${TEST_NAME} + Should Match Baseline ${compare_result} +MoveOrderInSameOwner + [Documentation] "Swap positions of array" + [Tags] crud critical 010405 + ${post_json} = Get File ${CURDIR}/../../JsonData/MovePosition.json + ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} + Should Be Equal ${result.status_code} ${200} + ${compare_result} = Compare JSON ${TEST_NAME} + Should Match Baseline ${compare_result} + -#GetAllElementsInModelFromCommit -# [Documentation] "Get All the elements in the model excluding the element with no owner" -# [Tags] mounts critical 010306 -# ${result} = Get url=${ROOT}/projects/CompleteModelGet/refs/master/elements?commitId=${commit} headers=&{REQ_HEADER} -# Should Be Equal ${result.status_code} ${200} -# ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds -# Generate JSON ${TEST_NAME} ${result.json()} ${filter} -# ${compare_result} = Compare JSON ${TEST_NAME} -# Should Match Baseline ${compare_result} -# -#GetAllElementsByProjectAndRef -# [Documentation] "Compare returned models" -# [Tags] critical workspaces 010307 -# ${resultA} = Get url=${ROOT}/projects/CompleteModelGet/refs/master/elements headers=&{REQ_HEADER} -# ${resultB} = Get url=${ROOT}/projects/CompleteModelGet/refs/master/elements/PA?depth=-1 headers=&{REQ_HEADER} -# Should Not Be Equal ${resultA.json()} ${resultB.json()} From 7028000b4a99e30f4af62bd7fbce21bda85d65c6 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Fri, 10 Aug 2018 09:14:21 -0700 Subject: [PATCH 045/126] fix logic, added test that's failing, probelm with set function --- .../java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 38b78f4e..4b75d084 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1338,16 +1338,14 @@ public JsonArray processMove(JsonArray moveData) throws IOException { String key = entry.getKey(); JsonArray ownedAttributeIdsToAdd = JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); - for (Map.Entry add : value.entrySet()) { Integer index = add.getKey(); String id = add.getValue(); // Set requires a jsonObject... - if (ownedAttributeIdsToAdd.size() > 0) { - ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); - } else { + if (index >= ownedAttributeIdsToAdd.size()) { ownedAttributeIdsToAdd.add(id); - + } else { + ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); } } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, ownedAttributeIdsToAdd); From 3146886ef6f5e8f463b268bc2fbf06fee487752b Mon Sep 17 00:00:00 2001 From: Jason Han Date: Fri, 10 Aug 2018 09:36:21 -0700 Subject: [PATCH 046/126] Fix typo --- .../main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java index 13478329..e5fe2862 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java @@ -682,7 +682,7 @@ public static EmsScriptNode updateOrCreateArtifact(String artifactId, Path fileP File content = filePath.toFile(); try { - finalType = tika.detect(filePath); + finalType = tika.detect(content); } catch (Exception e) { if (logger.isDebugEnabled()) { logger.debug("updateOrCreateArtifact: ", e); From de5b68b6b43b00817534a64438daa6260eeaee9e Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Fri, 10 Aug 2018 10:15:43 -0700 Subject: [PATCH 047/126] added more tests --- .../JsonData/MoveMultipleOwners.json | 28 +++++++++++++++++++ .../robotframework/JsonData/MovePosition.json | 2 +- .../suites/01__crud/04__move_post.robot | 8 ++++++ 3 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 mms-ent/runner/src/test/robotframework/JsonData/MoveMultipleOwners.json diff --git a/mms-ent/runner/src/test/robotframework/JsonData/MoveMultipleOwners.json b/mms-ent/runner/src/test/robotframework/JsonData/MoveMultipleOwners.json new file mode 100644 index 00000000..20693017 --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/JsonData/MoveMultipleOwners.json @@ -0,0 +1,28 @@ +{ + "moves": [ + { + "_creator": "admin", + "_modifier": "admin", + "id": "propMove2", + "from": "oldParent", + "to": "newParent", + "index":"3" + }, + { + "_creator": "admin", + "_modifier": "admin", + "id": "propMove3", + "from": "oldParent", + "to": "newParent", + "index":"1" + }, + { + "_creator": "admin", + "_modifier": "admin", + "id": "propMove4", + "from": "oldParent", + "to": "newParent", + "index":"0" + } + ] +} diff --git a/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json b/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json index 57cb581b..4729b359 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/MovePosition.json @@ -21,7 +21,7 @@ "_modifier": "admin", "id": "propMove4", "from": "oldParent", - "to": "newParent", + "to": "oldParent", "index":"0" } ] diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index f1cc16bb..3ceb330a 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -48,5 +48,13 @@ MoveOrderInSameOwner Should Be Equal ${result.status_code} ${200} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} +ChangeOwnerOfMultipleElements + [Documentation] "Swap to new owner" + [Tags] crud critical 010406 + ${post_json} = Get File ${CURDIR}/../../JsonData/MoveMultipleOwners.json + ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} + Should Be Equal ${result.status_code} ${200} + ${compare_result} = Compare JSON ${TEST_NAME} + Should Match Baseline ${compare_result} From 51b88a22551cae907e040186e8b28f2744de24d5 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 13 Aug 2018 14:38:53 -0700 Subject: [PATCH 048/126] Allow arbitrary metadata on refs --- .../src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java | 3 ++- .../gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java | 6 +++++- .../src/test/robotframework/JsonData/PostNewBranchToPA.json | 6 +++++- .../src/test/robotframework/output/baseline/GetRef.json | 6 +++++- .../robotframework/output/baseline/PostNewBranchToPA.json | 6 +++++- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java index 3af9918b..2d97b1c7 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java @@ -84,10 +84,11 @@ public class Sjm { public static final String ISREADONLY = "isReadOnly"; public static final String ISSTATIC = "isStatic"; public static final String ISUNIQUE = "isUnique"; - public static final String KEYWORDS = "keywords"; public static final String LOWERVALUE = "lowerValue"; + public static final String KEYWORDS = "keywords"; public static final String MDEXTENSIONSIDS = "mdExtensionsIds"; public static final String MEMBERENDIDS = "memberEndIds"; + public static final String METADATA = "metadata"; public static final String MOUNTEDELEMENTPROJECTID = "mountedElementProjectId"; public static final String MOUNTEDREFID = "mountedRefId"; public static final String NAME = "name"; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index 405475e8..8e213ad7 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -188,8 +188,8 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String JsonObject srcJson = new JsonObject(); String workspaceName = null; String desc = null; - boolean active = false; JsonArray keywords = new JsonArray(); + JsonObject metadata = new JsonObject(); String elasticId = null; boolean isTag = false; String permission = "read"; // Default is public read permission @@ -209,6 +209,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String isTag = JsonUtil.getOptString(wsJson, "type", "Branch").equals("Tag"); desc = JsonUtil.getOptString(wsJson, "description"); keywords = JsonUtil.getOptArray(wsJson, "keywords"); + metadata = JsonUtil.getOptObject(wsJson, "metadata"); permission = JsonUtil.getOptString(wsJson, "permission", "read"); // "read" or "write" } else { sourceWorkspaceId = sourceWorkId; @@ -237,6 +238,9 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String if (keywords.size() > 0) { wsJson.add(Sjm.KEYWORDS, keywords); } + if (metadata.size() > 0) { + wsJson.add(Sjm.METADATA, metadata); + } wsJson.addProperty(Sjm.CREATED, date); wsJson.addProperty(Sjm.CREATOR, user); wsJson.addProperty(Sjm.MODIFIED, date); diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostNewBranchToPA.json b/mms-ent/runner/src/test/robotframework/JsonData/PostNewBranchToPA.json index 0e7db3cc..dabfc681 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/PostNewBranchToPA.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostNewBranchToPA.json @@ -4,7 +4,11 @@ "id": "newbranch", "type": "Branch", "name": "newBranch", - "parentRefId": "master" + "parentRefId": "master", + "metadata": { + "active": true, + "someAttribute": "blah" + } } ] } diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetRef.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetRef.json index 3d0166c8..b09de396 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetRef.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetRef.json @@ -4,10 +4,14 @@ "_creator": "admin", "_modifier": "admin", "id": "newbranch", + "metadata": { + "active": true, + "someAttribute": "blah" + }, "name": "newBranch", "parentRefId": "master", "status": "created", "type": "branch" } ] -} \ No newline at end of file +} diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/PostNewBranchToPA.json b/mms-ent/runner/src/test/robotframework/output/baseline/PostNewBranchToPA.json index 02098e5b..0f97be84 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/PostNewBranchToPA.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/PostNewBranchToPA.json @@ -4,10 +4,14 @@ "_creator": "admin", "_modifier": "admin", "id": "newbranch", + "metadata": { + "active": true, + "someAttribute": "blah" + }, "name": "newBranch", "parentRefId": "master", "status": "creating", "type": "Branch" } ] -} \ No newline at end of file +} From 063d813bb8ed79baa31024707fb7e6e4a21fe7df Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 13 Aug 2018 17:15:00 -0700 Subject: [PATCH 049/126] Updating swagger to include undocumented endpoints --- .../src/main/amp/web/mms/mms.swagger.yaml | 224 +++++++++++++++--- 1 file changed, 185 insertions(+), 39 deletions(-) diff --git a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml index ba3b9591..47e0bc6e 100644 --- a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml +++ b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml @@ -327,39 +327,39 @@ paths: $ref: "#/responses/InternalServerError" default: $ref: "#/responses/Default" - /projects/{project_id}/commits/{commit_id}: - parameters: - - name: "project_id" - in: "path" - required: true - description: "project identifier" - type: "string" - - name: "commit_id" - in: "path" - required: true - description: "commit identifier" - type: "string" - get: - tags: - - "project" - summary: "Get project commit" - description: "" - operationId: "getProjectCommit" - responses: - 200: - description: "OK" - schema: - $ref: "#/definitions/Commits" - 401: - $ref: "#/responses/Unauthorized" - 403: - $ref: "#/responses/Forbidden" - 404: - $ref: "#/responses/NotFound" - 500: - $ref: "#/responses/InternalServerError" - default: - $ref: "#/responses/Default" +# /projects/{project_id}/commits/{commit_id}: +# parameters: +# - name: "project_id" +# in: "path" +# required: true +# description: "project identifier" +# type: "string" +# - name: "commit_id" +# in: "path" +# required: true +# description: "commit identifier" +# type: "string" +# get: +# tags: +# - "project" +# summary: "Get project commit" +# description: "" +# operationId: "getProjectCommit" +# responses: +# 200: +# description: "OK" +# schema: +# $ref: "#/definitions/Commits" +# 401: +# $ref: "#/responses/Unauthorized" +# 403: +# $ref: "#/responses/Forbidden" +# 404: +# $ref: "#/responses/NotFound" +# 500: +# $ref: "#/responses/InternalServerError" +# default: +# $ref: "#/responses/Default" /projects/{project_id}/refs: parameters: - name: "project_id" @@ -415,7 +415,7 @@ paths: 500: $ref: "#/responses/InternalServerError" 503: - $ref: "#/response/ServiceUnavailable" + $ref: "#/responses/ServiceUnavailable" default: $ref: "#/responses/Default" /projects/{project_id}/refs/{ref_id}: @@ -484,6 +484,50 @@ paths: required: true description: "ref identifier" type: "string" + - name: "maxTimestamp" + in: "query" + required: false + description: "max timestamp" + allowReserved: true + type: "string" + get: + tags: + - "ref" + summary: "Get ref history" + description: "" + operationId: "getRefHistory" + responses: + 200: + description: "OK" + schema: + $ref: "#/definitions/Commits" + 401: + $ref: "#/responses/Unauthorized" + 403: + $ref: "#/responses/Forbidden" + 404: + $ref: "#/responses/NotFound" + 500: + $ref: "#/responses/InternalServerError" + default: + $ref: "#/responses/Default" + /projects/{project_id}/refs/{ref_id}/documents: + parameters: + - name: "project_id" + in: "path" + required: true + description: "project identifier" + type: "string" + - name: "ref_id" + in: "path" + required: true + description: "ref identifier" + type: "string" + - name: "groupId" + in: "query" + required: false + description: "group identifier" + type: "string" get: tags: - "ref" @@ -517,6 +561,11 @@ paths: required: true description: "ref identifier" type: "string" + - name: "commitId" + in: "query" + required: false + description: "commit identifier" + type: "string" get: tags: - "element" @@ -1016,6 +1065,46 @@ paths: $ref: "#/responses/InternalServerError" default: $ref: "#/responses/Default" + /projects/{project_id}/refs/{ref_id}/convert: + parameters: + - name: "project_id" + in: "path" + required: true + description: "project identifier" + type: "string" + - name: "ref_id" + in: "path" + required: true + description: "ref identifier" + type: "string" + post: + tags: + - "other" + summary: "Converts HTML to requested format" + description: "" + operationId: "htmlConverter" + parameters: + - name: "body" + in: "body" + description: "" + schema: + $ref: "#/definitions/ConvertRequest" + required: true + responses: + 200: + description: "OK" + schema: + $ref: "#/definitions/ConvertResponse" + 401: + $ref: "#/responses/Unauthorized" + 403: + $ref: "#/responses/Forbidden" + 404: + $ref: "#/responses/NotFound" + 500: + $ref: "#/responses/InternalServerError" + default: + $ref: "#/responses/Default" /projects/{project_id}/refs/{ref_id}/groups: parameters: - name: "project_id" @@ -1082,7 +1171,7 @@ paths: $ref: "#/responses/InternalServerError" default: $ref: "#/responses/Default" - /projects/{project_id}/refs/{ref_id}/documents: + /projects/{project_id}/refs/{ref_id}/search: parameters: - name: "project_id" in: "path" @@ -1094,17 +1183,24 @@ paths: required: true description: "ref identifier" type: "string" - get: + post: tags: - "other" - summary: "Get documents" + summary: "Search for elements" description: "" - operationId: "getDocuments" + operationId: "searchElements" + parameters: + - name: "body" + in: "body" + description: "" + schema: + $ref: "#/definitions/SearchRequest" + required: true responses: 200: description: "OK" schema: - $ref: "#/definitions/Documents" + $ref: "#/definitions/Elements" 401: $ref: "#/responses/Unauthorized" 403: @@ -1339,6 +1435,56 @@ definitions: type: "array" items: $ref: "#/definitions/Element" + ConvertRequest: + type: "object" + required: + - "name" + - "body" + - "Accepts" + properties: + name: + type: "string" + body: + type: "string" + Accepts: + type: "string" + css: + type: "string" + ConvertResponse: + type: "object" + required: + - "name" + - "filename" + - "status" + properties: + name: + type: "string" + filename: + type: "string" + status: + type: "string" + SearchRequest: + type: "object" + required: + - "query" + properties: + query: + type: "object" + properties: + bool: + type: "object" + properties: + filter: + type: "array" + items: + type: "object" + properties: + term: + type: "object" + size: + type: "number" + sort: + type: "object" LoginRequest: type: "object" required: From 06a38360ff910bb7308c39697b9ea79439b7742b Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 14 Aug 2018 12:07:42 -0700 Subject: [PATCH 050/126] addressing CR --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 25 ++++---- .../jpl/view_repo/webscripts/MovePost.java | 57 +++++++------------ 2 files changed, 31 insertions(+), 51 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 4b75d084..eedc59c3 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -12,6 +12,8 @@ import java.text.SimpleDateFormat; import java.util.*; +import com.google.gson.*; +import com.google.gson.reflect.TypeToken; import gov.nasa.jpl.view_repo.db.*; import org.alfresco.repo.service.ServiceDescriptorRegistry; import org.alfresco.service.ServiceRegistry; @@ -23,18 +25,12 @@ import org.alfresco.util.TempFileProvider; import org.apache.commons.codec.digest.DigestUtils; import org.apache.log4j.Logger; -import com.google.gson.JsonObject; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonNull; import gov.nasa.jpl.mbee.util.Pair; import gov.nasa.jpl.mbee.util.TimeUtils; import gov.nasa.jpl.view_repo.db.GraphInterface.DbEdgeTypes; import gov.nasa.jpl.view_repo.db.GraphInterface.DbNodeTypes; import org.json.JSONObject; -import com.google.gson.JsonParser; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -1252,7 +1248,7 @@ private Map getQualifiedInformationForElement(JsonObject element return result; } - public JsonArray processMove(JsonArray moveData) throws IOException { + public JsonArray processMove(JsonArray moveData) { Map elements = new HashMap<>(); Set keys = new HashSet<>(); Map toRemove = new HashMap<>(); @@ -1294,8 +1290,8 @@ public JsonArray processMove(JsonArray moveData) throws IOException { for (Map.Entry entry : updateOwner.entrySet()) { String value = entry.getValue(); String key = entry.getKey(); - if (elements.get(key).getAsJsonObject().has(Sjm.ASSOCIATIONENDID)) { - String associationId = elements.get(key).getAsJsonObject().get(Sjm.ASSOCIATIONENDID).getAsString(); + if (elements.get(key).has(Sjm.ASSOCIATIONID)) { + String associationId = elements.get(key).get(Sjm.ASSOCIATIONENDID).getAsString(); String ownerParentPackage = pgh.getImmediateParentOfType(value, DbEdgeTypes.CONTAINMENT, dbnt); JsonObject associationObj = getNodeBySysmlid(associationId); associationObj.addProperty(Sjm.OWNERID, ownerParentPackage); @@ -1323,7 +1319,7 @@ public JsonArray processMove(JsonArray moveData) throws IOException { List value = entry.getValue(); String key = entry.getKey(); JsonArray ownedAttributeIdsToRemove = - JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); + JsonUtil.getOptArray(elements.get(key), Sjm.OWNEDATTRIBUTEIDS); JsonArray removed = new JsonArray(); for (int i = 0; i < ownedAttributeIdsToRemove.size(); i++) { @@ -1336,8 +1332,9 @@ public JsonArray processMove(JsonArray moveData) throws IOException { for (Map.Entry entry : toAdd.entrySet()) { Map value = entry.getValue(); String key = entry.getKey(); - JsonArray ownedAttributeIdsToAdd = - JsonUtil.getOptArray(elements.get(key).getAsJsonObject(), Sjm.OWNEDATTRIBUTEIDS); + List ownedAttributeIdsToAdd = + new Gson().fromJson(JsonUtil.getOptArray(elements.get(key), Sjm.OWNEDATTRIBUTEIDS), new TypeToken>(){}.getType()); + for (Map.Entry add : value.entrySet()) { Integer index = add.getKey(); String id = add.getValue(); @@ -1345,10 +1342,10 @@ public JsonArray processMove(JsonArray moveData) throws IOException { if (index >= ownedAttributeIdsToAdd.size()) { ownedAttributeIdsToAdd.add(id); } else { - ownedAttributeIdsToAdd.set(index, new JsonParser().parse(id).getAsJsonObject()); + ownedAttributeIdsToAdd.add(index, new JsonParser().parse(id).getAsJsonObject()); } } - elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, ownedAttributeIdsToAdd); + elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, new Gson().toJsonTree(ownedAttributeIdsToAdd)); } JsonArray toProcess = new JsonArray(); for (Map.Entry entry : elements.entrySet()) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index 5a8d6af1..15bb5906 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -53,38 +53,9 @@ import gov.nasa.jpl.mbee.util.Timer; -//mms - make new endpoint for moving property, (for multiple properties at once, will need to consolidate end state in case multiple moves to same element) -// -// changes needed for moving property p from b1 to b2 at index i (0 based?) -// -// change owner of p from b1 to b2 -// remove pId from b1's list of ownedAttributeIds -// insert pId to b2's list of ownedAttributeIds at i -// if p has associationId -// change association's owner to be the closest parent package of b2 -// if association's ownedEndId is not empty, change the referenced element's typeId to be b2 -// case if b1 == b2 and just moving index -// only change b's ownedAttributeIds list to have pId at the correct place -//{ -// "moves":[ -// { -// "id": "propertyId", -// "from": "old block id", -// "to": "new block id", -// "index": i -// } -// ] -// } - - public class MovePost extends ModelPost { - //static Logger logger = Logger.getLogger(MovePost.class); - - //protected EmsScriptNode workspace = null; - //private final String NEWELEMENTS = "newElements"; - - //public static boolean timeEvents = false; + private final String NEWELEMENTS = "newElements"; public MovePost() { super(); @@ -125,17 +96,14 @@ protected Map executeImplImpl(final WebScriptRequest req, final return result; } - protected Map createDeltaForMove(final WebScriptRequest req, String user, final Status status){ + protected Map createDeltaForMove(final WebScriptRequest req, String user, final Status status) { JsonObject newElementsObject = new JsonObject(); JsonObject results; String refId = getRefId(req); String projectId = getProjectId(req); - //Map model = new HashMap<>(); Map model = new HashMap<>(); - boolean withChildViews = false; - boolean extended = false; - + boolean withChildViews = true; EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); @@ -170,6 +138,18 @@ protected Map createDeltaForMove(final WebScriptRequest req, Stri } Map commitObject = emsNodeUtil.getGuidAndTimestampFromElasticId(commitId); + if (withChildViews) { + JsonArray array = results.get(NEWELEMENTS).getAsJsonArray(); + for (int i = 0; i < array.size(); i++) { + array.set(i, emsNodeUtil.addChildViews(array.get(i).getAsJsonObject())); + } + } + + newElementsObject.add(Sjm.ELEMENTS, filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)); + if (results.has("rejectedElements")) { + newElementsObject.add(Sjm.REJECTED, results.get("rejectedElements")); + } + newElementsObject.addProperty(Sjm.COMMITID, commitId); newElementsObject.addProperty(Sjm.TIMESTAMP, commitObject.get(Sjm.TIMESTAMP)); newElementsObject.addProperty(Sjm.CREATOR, user); @@ -182,12 +162,15 @@ protected Map createDeltaForMove(final WebScriptRequest req, Stri } status.setCode(responseStatus.getCode()); - + } else { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, + "Commit failed, please check server logs for failed items"); + model.put(Sjm.RES, createResponseJson()); } } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); //model.put(Sjm.RES, createResponseJson - }catch (Exception e) { + } catch (Exception e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); model.put(Sjm.RES, createResponseJson()); } From adbd68202695197c8de9f1661c58ba3715473448 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 14 Aug 2018 13:39:57 -0700 Subject: [PATCH 051/126] added param to modelPost so movePost can call ModelPost's methods --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 6 +- .../jpl/view_repo/webscripts/ModelPost.java | 43 ++++++---- .../jpl/view_repo/webscripts/MovePost.java | 82 +++---------------- 3 files changed, 42 insertions(+), 89 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index eedc59c3..439a0f07 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1248,13 +1248,14 @@ private Map getQualifiedInformationForElement(JsonObject element return result; } - public JsonArray processMove(JsonArray moveData) { + public JsonObject processMove(JsonArray moveData) { Map elements = new HashMap<>(); Set keys = new HashSet<>(); Map toRemove = new HashMap<>(); Map updateOwner = new HashMap<>(); Map toAdd = new HashMap<>(); Set dbnt = new HashSet<>(); + JsonObject wrapper = new JsonObject(); dbnt.add(DbNodeTypes.PACKAGE); for (int i = 0; i < moveData.size(); i++) { String srcId = JsonUtil.getOptString(moveData.get(i).getAsJsonObject(), "from"); @@ -1352,7 +1353,8 @@ public JsonArray processMove(JsonArray moveData) { toProcess.add(entry.getValue()); } - return toProcess; + wrapper.add(Sjm.ELEMENT, toProcess); + return wrapper; } public boolean isDeleted(String sysmlid) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java index 3ef0d5f3..67e995ff 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java @@ -43,6 +43,7 @@ import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.json.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -104,32 +105,38 @@ protected Map executeImplImpl(final WebScriptRequest req, final Timer timer = new Timer(); - Map result; - String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); + Map result = new HashMap(); - result = handleElementPost(req, status, user, contentType); + try { + + JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); + result = + handleElementPost(req, postJson, status, user); + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); + result.put(Sjm.RES, createResponseJson()); + } printFooter(user, logger, timer); return result; } - protected Map handleElementPost(final WebScriptRequest req, final Status status, String user, String contentType) { + protected Map handleElementPost(final WebScriptRequest req, JsonObject postJson, final Status status, String user) { JsonObject newElementsObject = new JsonObject(); JsonObject results; - boolean extended = Boolean.parseBoolean(req.getParameter("extended")); - boolean withChildViews = Boolean.parseBoolean(req.getParameter("childviews")); - boolean overwriteJson = Boolean.parseBoolean(req.getParameter("overwrite")); + + Map model = new HashMap<>(); String refId = getRefId(req); String projectId = getProjectId(req); - Map model = new HashMap<>(); + boolean extended = Boolean.parseBoolean(req.getParameter("extended")); + boolean withChildViews = Boolean.parseBoolean(req.getParameter("childviews")); + boolean overwriteJson = Boolean.parseBoolean(req.getParameter("overwrite")); EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); try { - JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); - if (logger.isDebugEnabled()) { logger.debug(String.format("Post Data: '%s'", postJson)); } @@ -140,9 +147,8 @@ protected Map handleElementPost(final WebScriptRequest req, fina String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); results = emsNodeUtil - .processPostJson(postJson.get(Sjm.ELEMENTS).getAsJsonArray(), - user, oldElasticIds, overwriteJson, - this.requestSourceApplication, comment, Sjm.ELEMENT); + .processPostJson(postJson.get(Sjm.ELEMENTS).getAsJsonArray(), user, oldElasticIds, overwriteJson, + this.requestSourceApplication, comment, Sjm.ELEMENT); String commitId = results.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); @@ -165,15 +171,16 @@ protected Map handleElementPost(final WebScriptRequest req, fina Map commitObject = emsNodeUtil.getGuidAndTimestampFromElasticId(commitId); if (withChildViews) { - JsonArray array = results.get(NEWELEMENTS).getAsJsonArray(); + JsonArray array = results.get(NEWELEMENTS).getAsJsonArray(); for (int i = 0; i < array.size(); i++) { - array.set(i, emsNodeUtil.addChildViews(array.get(i).getAsJsonObject())); + array.set(i, emsNodeUtil.addChildViews(array.get(i).getAsJsonObject())); } } newElementsObject.add(Sjm.ELEMENTS, extended ? - emsNodeUtil.addExtendedInformation(filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)) - : filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)); + emsNodeUtil + .addExtendedInformation(filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)) : + filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)); if (results.has("rejectedElements")) { newElementsObject.add(Sjm.REJECTED, results.get("rejectedElements")); } @@ -182,7 +189,7 @@ protected Map handleElementPost(final WebScriptRequest req, fina newElementsObject.addProperty(Sjm.CREATOR, user); if (prettyPrint) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); + Gson gson = new GsonBuilder().setPrettyPrinting().create(); model.put(Sjm.RES, gson.toJson(newElementsObject)); } else { model.put(Sjm.RES, newElementsObject); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index 15bb5906..c908127d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -84,99 +84,43 @@ protected Map executeImplImpl(final WebScriptRequest req, final Timer timer = new Timer(); - Map result; + Map result = new HashMap(); String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); // call move logic - - result = createDeltaForMove(req, user, status); + try { + JsonObject moved = createDeltaForMove(req); + result = handleElementPost(req, moved, status, user); + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); + result.put(Sjm.RES, createResponseJson()); + } printFooter(user, logger, timer); return result; } - protected Map createDeltaForMove(final WebScriptRequest req, String user, final Status status) { + protected JsonObject createDeltaForMove(final WebScriptRequest req) { JsonObject newElementsObject = new JsonObject(); JsonObject results; String refId = getRefId(req); String projectId = getProjectId(req); - Map model = new HashMap<>(); - boolean withChildViews = true; EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + JsonObject moved = new JsonObject(); + try { JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); + moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); - if (logger.isDebugEnabled()) { - logger.debug(String.format("Post Data: '%s'", postJson)); - } - - Set oldElasticIds = new HashSet<>(); - JsonArray moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); - results = emsNodeUtil - .processPostJson(moved, user, oldElasticIds, false, this.requestSourceApplication, "", Sjm.ELEMENT); - String commitId = results.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); - - int added = JsonUtil.getOptArray(results, "addedElements").size(); - int updated = JsonUtil.getOptArray(results, "updatedElements").size(); - int deleted = JsonUtil.getOptArray(results, "deletedElements").size(); - - if (added + updated + deleted == 0) { - JsonObject rejected = new JsonObject(); - rejected.addProperty(Sjm.CREATOR, user); - rejected.add(Sjm.ELEMENTS, new JsonArray()); - JsonArray rejectedElements = JsonUtil.getOptArray(results, "rejectedElements"); - rejected.add(Sjm.REJECTED, rejectedElements); - model.put(Sjm.RES, rejected); - } else if (CommitUtil - .sendDeltas(results, projectId, refId, requestSourceApplication, services, withChildViews, false)) { - if (!oldElasticIds.isEmpty()) { - emsNodeUtil.updateElasticRemoveRefs(oldElasticIds, "element"); - } - Map commitObject = emsNodeUtil.getGuidAndTimestampFromElasticId(commitId); - - if (withChildViews) { - JsonArray array = results.get(NEWELEMENTS).getAsJsonArray(); - for (int i = 0; i < array.size(); i++) { - array.set(i, emsNodeUtil.addChildViews(array.get(i).getAsJsonObject())); - } - } - - newElementsObject.add(Sjm.ELEMENTS, filterByPermission(results.get(NEWELEMENTS).getAsJsonArray(), req)); - if (results.has("rejectedElements")) { - newElementsObject.add(Sjm.REJECTED, results.get("rejectedElements")); - } - - newElementsObject.addProperty(Sjm.COMMITID, commitId); - newElementsObject.addProperty(Sjm.TIMESTAMP, commitObject.get(Sjm.TIMESTAMP)); - newElementsObject.addProperty(Sjm.CREATOR, user); - - if (prettyPrint) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - model.put(Sjm.RES, gson.toJson(newElementsObject)); - } else { - model.put(Sjm.RES, newElementsObject); - } - - status.setCode(responseStatus.getCode()); - } else { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, - "Commit failed, please check server logs for failed items"); - model.put(Sjm.RES, createResponseJson()); - } } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); //model.put(Sjm.RES, createResponseJson - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - model.put(Sjm.RES, createResponseJson()); } - - status.setCode(responseStatus.getCode()); - return model; + return moved; } From edd650f398c2e40e8c2b87c4cc23913d5e0c83cf Mon Sep 17 00:00:00 2001 From: Jason Han Date: Tue, 14 Aug 2018 19:53:16 -0700 Subject: [PATCH 052/126] Fix content-type detection to use tika --- .../jpl/view_repo/webscripts/ArtifactPost.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java index 2b281c46..8444724d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java @@ -41,6 +41,9 @@ import org.apache.commons.io.FilenameUtils; import org.apache.log4j.Level; import org.apache.log4j.Logger; +import org.apache.tika.Tika; +import org.apache.tika.config.TikaConfig; +import org.apache.tika.mime.MimeTypeException; import org.springframework.extensions.surf.util.Content; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; @@ -71,6 +74,9 @@ public class ArtifactPost extends AbstractJavaWebScript { protected String mimeType = null; protected String encoding = null; + protected Tika tika = new Tika(); + protected TikaConfig tikaConfig = TikaConfig.getDefaultConfig(); + private final String NEWELEMENTS = "newElements"; public ArtifactPost() { @@ -118,7 +124,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final filePath = EmsNodeUtil.saveToFilesystem(filename, field.getInputStream()); content = new String(Files.readAllBytes(filePath)); - finalContentType = Files.probeContentType(filePath); + finalContentType = tika.detect(filePath); if (logger.isDebugEnabled()) { logger.debug("filename: " + filename); @@ -220,7 +226,12 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri if (validateRequest(req, status) && !siteName.isEmpty()) { - extension = FilenameUtils.getExtension(filename); + try { + extension = tikaConfig.getMimeRepository().forName(finalContentType).getExtension(); + } catch (MimeTypeException mte) { + logger.debug(mte); + extension = FilenameUtils.getExtension(filename); + } artifactId = postJson.get(Sjm.SYSMLID).getAsString(); // Create return json: From 0b528d0d85196725a69195194409cf5952c7d3e7 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Tue, 14 Aug 2018 20:14:25 -0700 Subject: [PATCH 053/126] Uncomment endpoint --- .../src/main/amp/web/mms/mms.swagger.yaml | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml index 47e0bc6e..8dfc24b3 100644 --- a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml +++ b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml @@ -327,39 +327,39 @@ paths: $ref: "#/responses/InternalServerError" default: $ref: "#/responses/Default" -# /projects/{project_id}/commits/{commit_id}: -# parameters: -# - name: "project_id" -# in: "path" -# required: true -# description: "project identifier" -# type: "string" -# - name: "commit_id" -# in: "path" -# required: true -# description: "commit identifier" -# type: "string" -# get: -# tags: -# - "project" -# summary: "Get project commit" -# description: "" -# operationId: "getProjectCommit" -# responses: -# 200: -# description: "OK" -# schema: -# $ref: "#/definitions/Commits" -# 401: -# $ref: "#/responses/Unauthorized" -# 403: -# $ref: "#/responses/Forbidden" -# 404: -# $ref: "#/responses/NotFound" -# 500: -# $ref: "#/responses/InternalServerError" -# default: -# $ref: "#/responses/Default" + /projects/{project_id}/commits/{commit_id}: + parameters: + - name: "project_id" + in: "path" + required: true + description: "project identifier" + type: "string" + - name: "commit_id" + in: "path" + required: true + description: "commit identifier" + type: "string" + get: + tags: + - "project" + summary: "Get project commit" + description: "" + operationId: "getProjectCommit" + responses: + 200: + description: "OK" + schema: + $ref: "#/definitions/Commits" + 401: + $ref: "#/responses/Unauthorized" + 403: + $ref: "#/responses/Forbidden" + 404: + $ref: "#/responses/NotFound" + 500: + $ref: "#/responses/InternalServerError" + default: + $ref: "#/responses/Default" /projects/{project_id}/refs: parameters: - name: "project_id" From 4755099f5f936fd478b2b71ecc594892bf3bf297 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Tue, 14 Aug 2018 20:29:46 -0700 Subject: [PATCH 054/126] Default to supplied content type on tika failure --- .../gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java index 8444724d..61af9d87 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java @@ -216,7 +216,9 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri Map model = new HashMap<>(); // Replace with true content type - postJson.addProperty(Sjm.CONTENTTYPE, finalContentType); + if (finalContentType != null) { + postJson.addProperty(Sjm.CONTENTTYPE, finalContentType); + } String projectId = getProjectId(req); String refId = getRefId(req); @@ -230,8 +232,12 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri extension = tikaConfig.getMimeRepository().forName(finalContentType).getExtension(); } catch (MimeTypeException mte) { logger.debug(mte); + } + + if (extension == null) { extension = FilenameUtils.getExtension(filename); } + artifactId = postJson.get(Sjm.SYSMLID).getAsString(); // Create return json: From 63459cae0d4700bc68b15c963cc68a9eb2f89cf1 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Tue, 14 Aug 2018 20:42:23 -0700 Subject: [PATCH 055/126] Use json for filetype arg in extension --- .../java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java index 61af9d87..bc0b3371 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java @@ -229,7 +229,7 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri if (validateRequest(req, status) && !siteName.isEmpty()) { try { - extension = tikaConfig.getMimeRepository().forName(finalContentType).getExtension(); + extension = tikaConfig.getMimeRepository().forName(JsonUtil.getOptString(postJson, Sjm.CONTENTTYPE)).getExtension(); } catch (MimeTypeException mte) { logger.debug(mte); } From c20b2b6ba4055e9eeb2fec9e9226ac27b8f95cee Mon Sep 17 00:00:00 2001 From: Jason Han Date: Tue, 14 Aug 2018 21:04:53 -0700 Subject: [PATCH 056/126] Make search request more generic --- .../repo-amp/src/main/amp/web/mms/mms.swagger.yaml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml index 8dfc24b3..7f8c27a4 100644 --- a/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml +++ b/mms-ent/repo-amp/src/main/amp/web/mms/mms.swagger.yaml @@ -1470,17 +1470,6 @@ definitions: properties: query: type: "object" - properties: - bool: - type: "object" - properties: - filter: - type: "array" - items: - type: "object" - properties: - term: - type: "object" size: type: "number" sort: From d6ed839851c330155832e5e640b57ef10efd6f99 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 15 Aug 2018 08:42:11 -0700 Subject: [PATCH 057/126] Adding in sanitization for search query --- .../nasa/jpl/view_repo/db/ElasticHelper.java | 21 +++++++++++++++++-- .../JsonData/SearchQueryLiteral.json | 10 ++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java index c0059232..2456f4b0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java @@ -7,6 +7,7 @@ import java.util.Map; import java.util.Set; +import com.google.gson.JsonElement; import io.searchbox.cluster.UpdateSettings; import io.searchbox.core.*; import io.searchbox.indices.DeleteIndex; @@ -535,7 +536,7 @@ public JsonObject search(JsonObject queryJson) throws IOException { JsonObject top = new JsonObject(); JsonArray elements = new JsonArray(); - Search search = new Search.Builder(queryJson.toString()).build(); + Search search = new Search.Builder(sanitizeSearchQuery(queryJson).toString().replaceAll("\"script\"[ ]*:[^,}\\]]*[,]?", "")).build(); SearchResult result = client.execute(search); if (result == null) { @@ -560,7 +561,7 @@ public JsonObject search(JsonObject queryJson) throws IOException { } public JsonObject searchLiteral(JsonObject queryJson) throws IOException { - Search search = new Search.Builder(queryJson.toString()).build(); + Search search = new Search.Builder(sanitizeSearchQuery(queryJson).toString()).build(); SearchResult result = client.execute(search); return result.getJsonObject(); } @@ -735,4 +736,20 @@ public Map getDeletedElementsFromCommits(List commitIds, } return deletedElements; } + + private static JsonObject sanitizeSearchQuery(JsonObject json) { + JsonObject sanitized = new JsonObject(); + for (Map.Entry entry : json.entrySet()) { + if (entry.getValue() instanceof JsonObject) { + if (!entry.getKey().equals("script")) { + sanitized.add(entry.getKey(), sanitizeSearchQuery(entry.getValue().getAsJsonObject())); + } + } else if (!entry.getKey().equals("script")) { + sanitized.add(entry.getKey(), entry.getValue()); + } + } + logger.error("Sanitized: "); + logger.error(sanitized.toString()); + return sanitized; + } } diff --git a/mms-ent/runner/src/test/robotframework/JsonData/SearchQueryLiteral.json b/mms-ent/runner/src/test/robotframework/JsonData/SearchQueryLiteral.json index 47143e11..12bf9838 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/SearchQueryLiteral.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/SearchQueryLiteral.json @@ -30,7 +30,15 @@ ] } } - ] + ], + "must": { + "script": { + "script": { + "inline": "doc['num1'].value > 1", + "lang": "painless" + } + } + } } } ], From a55ad1eba14ab8300581be87633dc74560b922d4 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 15 Aug 2018 16:59:42 -0700 Subject: [PATCH 058/126] Extend from ModelGet --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 2 +- .../jpl/view_repo/webscripts/CfIdsGet.java | 30 +++---------------- .../jpl/view_repo/webscripts/ModelGet.java | 26 +++++++++------- 3 files changed, 21 insertions(+), 37 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index b49f86b5..cbdc0025 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -318,7 +318,7 @@ public JsonArray getRefHistory(String refId, String commitId, int limit) { JsonArray result = new JsonArray(); int cId = pgh.getCommitId(commitId); List> refCommits = pgh.getRefsCommits(refId, cId, limit); - if (refCommits.size() > 0) { + if (!refCommits.isEmpty()) { result = processCommits(refCommits); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/CfIdsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/CfIdsGet.java index dc4135a1..a91a2eb3 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/CfIdsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/CfIdsGet.java @@ -51,7 +51,7 @@ import gov.nasa.jpl.mbee.util.Utils; import gov.nasa.jpl.view_repo.db.Node; -public class CfIdsGet extends AbstractJavaWebScript { +public class CfIdsGet extends ModelGet { static Logger logger = Logger.getLogger(CfIdsGet.class); @@ -65,20 +65,6 @@ public CfIdsGet(Repository repositoryHelper, ServiceRegistry registry) { super(repositoryHelper, registry); } - @Override protected boolean validateRequest(WebScriptRequest req, Status status) { - String refId = getRefId(req); - String projectId = getProjectId(req); - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - - if (refId != null && refId.equalsIgnoreCase(NO_WORKSPACE_ID)) { - return true; - } else if (refId != null && !emsNodeUtil.refExists(refId)) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Reference with id, %s not found", refId); - return false; - } - return true; - } - /** * Entry point */ @@ -137,15 +123,7 @@ protected JsonArray handleElementHierarchy(String rootSysmlid, WebScriptRequest Long depth = null; String depthParam = req.getParameter("depth"); if (depthParam != null) { - try { - depth = Long.parseLong(depthParam); - if (depth < 0) { - depth = 100000L; - } - } catch (NumberFormatException nfe) { - // don't do any recursion, ignore the depth - log(Level.WARN, HttpServletResponse.SC_BAD_REQUEST, "Bad depth specified, returning depth 0"); - } + depth = parseDepth(depthParam); } if (depth == null) { depth = 5L; @@ -156,7 +134,7 @@ protected JsonArray handleElementHierarchy(String rootSysmlid, WebScriptRequest protected JsonArray handleMountSearch(JsonObject mountsJson, String rootSysmlid, Long depth) throws SQLException, IOException { JsonArray result = null; - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(mountsJson.get(Sjm.SYSMLID).getAsString(), + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(mountsJson.get(Sjm.SYSMLID).getAsString(), mountsJson.get(Sjm.REFID).getAsString()); Node n = emsNodeUtil.getById(rootSysmlid); if (n != null) { @@ -168,7 +146,7 @@ protected JsonArray handleMountSearch(JsonObject mountsJson, String rootSysmlid, } if (!mountsJson.has(Sjm.MOUNTS)) { mountsJson = emsNodeUtil.getProjectWithFullMounts( - mountsJson.get(Sjm.SYSMLID).getAsString(), + mountsJson.get(Sjm.SYSMLID).getAsString(), mountsJson.get(Sjm.REFID).getAsString(), null); } JsonArray mountsArray = mountsJson.get(Sjm.MOUNTS).getAsJsonArray(); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index c1ce3018..19542c2b 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -262,19 +262,11 @@ private JsonObject handleCommitRequest(WebScriptRequest req) { * @return Depth < 0 is infinite recurse, depth = 0 is just the element (if no request * parameter) */ - public Long getDepthFromRequest(WebScriptRequest req) { + Long getDepthFromRequest(WebScriptRequest req) { Long depth = null; String depthParam = req.getParameter("depth"); if (depthParam != null) { - try { - depth = Long.parseLong(depthParam); - if (depth < 0) { - depth = 100000L; - } - } catch (NumberFormatException nfe) { - // don't do any recursion, ignore the depth - log(Level.WARN, HttpServletResponse.SC_BAD_REQUEST, "Bad depth specified, returning depth 0"); - } + depth = parseDepth(depthParam); } // recurse default is false @@ -292,4 +284,18 @@ public Long getDepthFromRequest(WebScriptRequest req) { return depth; } + + Long parseDepth(String depthParam) { + Long depth = 0L; + try { + depth = Long.parseLong(depthParam); + if (depth < 0) { + depth = 100000L; + } + } catch (NumberFormatException nfe) { + // don't do any recursion, ignore the depth + log(Level.WARN, HttpServletResponse.SC_BAD_REQUEST, "Bad depth specified, returning depth 0"); + } + return depth; + } } From b91af0f59ebdbfd478079d6502ef08ece063d7f6 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 16 Aug 2018 13:37:11 -0700 Subject: [PATCH 059/126] CR fixes --- .../gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 12 ++++++------ .../gov/nasa/jpl/view_repo/webscripts/MovePost.java | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 439a0f07..3a142f74 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1249,12 +1249,12 @@ private Map getQualifiedInformationForElement(JsonObject element } public JsonObject processMove(JsonArray moveData) { - Map elements = new HashMap<>(); - Set keys = new HashSet<>(); - Map toRemove = new HashMap<>(); - Map updateOwner = new HashMap<>(); - Map toAdd = new HashMap<>(); - Set dbnt = new HashSet<>(); + HashMap elements = new HashMap<>(); + HashSet keys = new HashSet<>(); + HashMap toRemove = new HashMap<>(); + HashMap updateOwner = new HashMap<>(); + HashMap toAdd = new HashMap<>(); + HashSet dbnt = new HashSet<>(); JsonObject wrapper = new JsonObject(); dbnt.add(DbNodeTypes.PACKAGE); for (int i = 0; i < moveData.size(); i++) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index c908127d..d431d5f2 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -85,7 +85,6 @@ protected Map executeImplImpl(final WebScriptRequest req, final Timer timer = new Timer(); Map result = new HashMap(); - String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); // call move logic try { @@ -102,9 +101,6 @@ protected Map executeImplImpl(final WebScriptRequest req, final } protected JsonObject createDeltaForMove(final WebScriptRequest req) { - JsonObject newElementsObject = new JsonObject(); - JsonObject results; - String refId = getRefId(req); String projectId = getProjectId(req); @@ -115,6 +111,10 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req) { try { JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); + String src = JsonUtil.getOptString(postJson, Sjm.SOURCE); + moved.addProperty(Sjm.COMMENT, comment); + moved.addProperty(Sjm.SOURCE, src); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); From bcc06efafa969a2b72bb384ab7ae35b2d9a750a5 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 16 Aug 2018 13:38:13 -0700 Subject: [PATCH 060/126] CR fixes --- .../src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 3a142f74..4dcd9f72 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1292,7 +1292,7 @@ public JsonObject processMove(JsonArray moveData) { String value = entry.getValue(); String key = entry.getKey(); if (elements.get(key).has(Sjm.ASSOCIATIONID)) { - String associationId = elements.get(key).get(Sjm.ASSOCIATIONENDID).getAsString(); + String associationId = elements.get(key).get(Sjm.ASSOCIATIONID).getAsString(); String ownerParentPackage = pgh.getImmediateParentOfType(value, DbEdgeTypes.CONTAINMENT, dbnt); JsonObject associationObj = getNodeBySysmlid(associationId); associationObj.addProperty(Sjm.OWNERID, ownerParentPackage); From 5bc79e6f06352d12b3ca650e2e0d4097e0711a9e Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 16 Aug 2018 13:39:28 -0700 Subject: [PATCH 061/126] CR fixes --- .../src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 4dcd9f72..121f825b 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1343,7 +1343,7 @@ public JsonObject processMove(JsonArray moveData) { if (index >= ownedAttributeIdsToAdd.size()) { ownedAttributeIdsToAdd.add(id); } else { - ownedAttributeIdsToAdd.add(index, new JsonParser().parse(id).getAsJsonObject()); + ownedAttributeIdsToAdd.add(index, new JsonParser().parse(id)); } } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, new Gson().toJsonTree(ownedAttributeIdsToAdd)); From 6d7feee6d643768ae357f790665af0fb1d0b1635 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 16 Aug 2018 13:40:16 -0700 Subject: [PATCH 062/126] CR fixes --- .../main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java | 1 - 1 file changed, 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java index 67e995ff..8e970e6a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java @@ -43,7 +43,6 @@ import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Level; import org.apache.log4j.Logger; -import org.json.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; From 18014c5effd45dd4aadc5c049d1173bfb596371e Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Thu, 16 Aug 2018 13:41:11 -0700 Subject: [PATCH 063/126] CR fixes --- .../java/gov/nasa/jpl/view_repo/webscripts/MovePost.java | 9 --------- 1 file changed, 9 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index d431d5f2..b25cac1e 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -25,30 +25,21 @@ package gov.nasa.jpl.view_repo.webscripts; -import java.io.IOException; import java.util.*; import javax.servlet.http.HttpServletResponse; -import gov.nasa.jpl.view_repo.util.CommitUtil; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; -import gov.nasa.jpl.view_repo.util.LogUtil; import gov.nasa.jpl.view_repo.util.Sjm; -import gov.nasa.jpl.view_repo.util.EmsScriptNode; import gov.nasa.jpl.view_repo.util.JsonUtil; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.json.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; import com.google.gson.JsonObject; import gov.nasa.jpl.mbee.util.Timer; From 4d2526cfbd67aa8d0d18a8d4de9872237bc5fad3 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 16 Aug 2018 18:30:27 -0700 Subject: [PATCH 064/126] Major refactor of ModelGet and ModelsGet --- .../nasa/jpl/view_repo/db/ElasticHelper.java | 2 +- .../nasa/jpl/view_repo/db/PostgresHelper.java | 50 ++-- .../nasa/jpl/view_repo/util/CommitUtil.java | 11 +- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 7 +- .../webscripts/DeclarativeJavaWebScript.java | 4 +- .../jpl/view_repo/webscripts/ModelDelete.java | 4 +- .../jpl/view_repo/webscripts/ModelGet.java | 231 +++++++++--------- .../jpl/view_repo/webscripts/ModelsGet.java | 68 ------ .../output/baseline/DeleteElement.json | 11 +- ...tCommitBetweenDeletionAndResurrection.json | 10 +- 10 files changed, 173 insertions(+), 225 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java index c0059232..0ce0c0ce 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java @@ -675,7 +675,7 @@ public JsonObject getElementsLessThanOrEqualTimestamp(String sysmlId, String tim } count += termLimit; } - return new JsonObject(); + return null; } public Map getDeletedElementsFromCommits(List commitIds, String index) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java index b6f8c61e..2af31495 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java @@ -900,7 +900,6 @@ public String insertCommit(String elasticId, DbCommitTypes type, String creator, Map map = new HashMap<>(); // we can hard code the commit type here....but we should still store the integer value // from the DB in memory - int parentId = getHeadCommit(); map.put("elasticId", elasticId); map.put("commitType", type.getValue()); map.put("refId", workspaceId); @@ -1107,10 +1106,10 @@ public int getCommitId(String commitId) { } try (PreparedStatement statement = prepareStatement("SELECT id FROM commits WHERE elasticid = ?")) { statement.setString(1, commitId); - ResultSet rs = statement.executeQuery(); - - if (rs.next()) { - return rs.getInt(1); + try (ResultSet rs = statement.executeQuery()) { + if (rs.next()) { + return rs.getInt(1); + } } } catch (Exception e) { logger.warn(String.format("%s", LogUtil.getStackTrace(e))); @@ -1359,13 +1358,13 @@ public String getGroup(String sysmlId) { statement.setInt(1, n.getId()); statement.setInt(2, DbEdgeTypes.CONTAINMENT.getValue()); statement.setString(3, workspaceId); - ResultSet rs = statement.executeQuery(); - - while (rs.next()) { - if (rs.getInt(3) == DbNodeTypes.SITEANDPACKAGE.getValue()) { - return rs.getString(1); - } else if (rs.getInt(3) == DbNodeTypes.SITE.getValue()) { - return null; + try (ResultSet rs = statement.executeQuery()) { + while (rs.next()) { + if (rs.getInt(3) == DbNodeTypes.SITEANDPACKAGE.getValue()) { + return rs.getString(1); + } else if (rs.getInt(3) == DbNodeTypes.SITE.getValue()) { + return null; + } } } } @@ -1925,9 +1924,10 @@ public boolean isTag(String refId) { "SELECT tag FROM refs WHERE (refId = ? OR refName = ?) AND deleted = false")) { statement.setString(1, sanitizeRefId(refId)); statement.setString(2, sanitizeRefId(refId)); - ResultSet rs = statement.executeQuery(); - if (rs.next()) { - return rs.getBoolean(1); + try (ResultSet rs = statement.executeQuery()) { + if (rs.next()) { + return rs.getBoolean(1); + } } } catch (Exception e) { logger.warn(String.format("%s", LogUtil.getStackTrace(e))); @@ -1998,13 +1998,12 @@ public Pair getParentRef(String refId) { try (PreparedStatement statement = prepareStatement( "SELECT parent, timestamp FROM refs WHERE deleted = false AND refId = ?")) { statement.setString(1, sanitizeRefId(refId)); - ResultSet rs = statement.executeQuery(); - if (rs.next()) { - String checkForMaster = - (rs.getString(1).equals("") && !refId.equals("master")) ? "master" : rs.getString(1); - return new Pair<>(checkForMaster, rs.getTimestamp(2).getTime()); + try (ResultSet rs = statement.executeQuery()) { + if (rs.next()) { + String checkForMaster = (rs.getString(1).equals("") && !refId.equals("master")) ? "master" : rs.getString(1); + return new Pair<>(checkForMaster, rs.getTimestamp(2).getTime()); + } } - } catch (Exception e) { logger.warn(String.format("%s", LogUtil.getStackTrace(e))); } finally { @@ -2081,7 +2080,7 @@ public List> getRefsCommits(String refId, int commitId, Time } if (timestamp != null) { - query.append(" AND date_trunc('milliseconds', timestamp) <= ?"); + query.append(" AND date_trunc('seconds', timestamp) <= ?"); timestampColNum = commitColNum == 3 ? 4 : 3; } @@ -2144,9 +2143,10 @@ public List> getRefsCommits(String refId, int commitId, Time public String getProjectInitialCommit() { try (PreparedStatement statement = prepareStatement( "SELECT elasticid FROM commits WHERE id = (SELECT min(id) FROM commits)")) { - ResultSet rs = statement.executeQuery(); - if (rs.next()) { - return rs.getString(1); + try (ResultSet rs = statement.executeQuery()) { + if (rs.next()) { + return rs.getString(1); + } } } catch (Exception e) { logger.warn(String.format("%s", LogUtil.getStackTrace(e))); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index ac65c4f9..8af570b4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -3,6 +3,8 @@ import java.io.IOException; import java.sql.SQLException; import java.sql.Savepoint; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -12,7 +14,6 @@ import java.util.Set; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -82,6 +83,8 @@ public class CommitUtil { private static String user = null; + private static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + private static HazelcastInstance hzInstance = null; private static BlockingQueue blockingQueue = new ArrayBlockingQueue<>(1); private static ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 10, TimeUnit.SECONDS, blockingQueue, new QueueRejector()); @@ -223,6 +226,7 @@ private static boolean processArtifactDeltasForDb(JsonObject delta, String proje JsonArray deleted = JsonUtil.getOptArray(delta, "deletedElements"); String creator = delta.get("commit").getAsJsonObject().get(Sjm.CREATOR).getAsString(); + String created = delta.get("commit").getAsJsonObject().get(Sjm.CREATED).getAsString(); String commitElasticId = delta.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); JsonObject jmsWorkspace = new JsonObject(); @@ -280,7 +284,7 @@ private static boolean processArtifactDeltasForDb(JsonObject delta, String proje pgh.runBatchQueries(artifactUpdates, "artifactUpdates"); pgh.updateLastCommitsArtifacts(commitElasticId, deletedSysmlIds); pgh.commitTransaction(); - pgh.insertCommit(commitElasticId, DbCommitTypes.COMMIT, creator); + pgh.insertCommit(commitElasticId, DbCommitTypes.COMMIT, creator, new Timestamp(df.parse(created).getTime())); } catch (Exception e) { try { pgh.rollBackToSavepoint(sp); @@ -335,6 +339,7 @@ private static boolean processDeltasForDb(JsonObject delta, String projectId, St JsonArray deleted = JsonUtil.getOptArray(delta, "deletedElements"); String creator = delta.get("commit").getAsJsonObject().get(Sjm.CREATOR).getAsString(); + String created = delta.get("commit").getAsJsonObject().get(Sjm.CREATED).getAsString(); String commitElasticId = delta.get("commit").getAsJsonObject().get(Sjm.ELASTICID).getAsString(); JsonObject jmsWorkspace = new JsonObject(); @@ -529,7 +534,7 @@ private static boolean processDeltasForDb(JsonObject delta, String projectId, St //pgh.updateBySysmlIds(NODES, LASTCOMMIT, commitElasticId, deletedSysmlIds); pgh.updateLastCommitsNodes(commitElasticId, deletedSysmlIds); pgh.commitTransaction(); - pgh.insertCommit(commitElasticId, DbCommitTypes.COMMIT, creator); + pgh.insertCommit(commitElasticId, DbCommitTypes.COMMIT, creator, new Timestamp(df.parse(created).getTime())); sp = pgh.startTransaction(); pgh.runBatchQueries(edgeInserts, EDGES); pgh.commitTransaction(); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index cbdc0025..72dfa55a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1773,14 +1773,14 @@ public JsonObject getElementAtCommit(String sysmlId, String commitId) { if (pastElement != null && pastElement.has(Sjm.SYSMLID) && deletedElementIds .containsKey(pastElement.get(Sjm.ELASTICID).getAsString())) { - pastElement = new JsonObject(); + pastElement = null; } } - return pastElement == null ? new JsonObject() : pastElement; + return pastElement; } public JsonObject getElementAtCommit(String sysmlId, String commitId, List refIds) { - JsonObject result = new JsonObject(); + JsonObject result = null; try { // Get commit object and retrieve the refs commits @@ -1805,6 +1805,7 @@ public JsonArray getNearestCommitFromTimestamp(String refId, String timestamp, i Date requestedTime; List> commits; JsonArray response = new JsonArray(); + try { requestedTime = df.parse(timestamp); Timestamp time = new Timestamp(requestedTime.getTime()); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java index 59cd4e45..9ff2a2f1 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java @@ -371,7 +371,9 @@ private JsonObject filterElementByPermission(JsonObject element, String projectI permCache.put(cacheKey, writePermMap); } } - element.addProperty(Sjm.EDITABLE, editable); + if (element.has(Sjm.SYSMLID)) { + element.addProperty(Sjm.EDITABLE, editable); + } return element; } return null; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelDelete.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelDelete.java index 4806da9c..40cd2f59 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelDelete.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelDelete.java @@ -57,7 +57,7 @@ public ModelDelete(Repository repositoryHelper, ServiceRegistry registry) { JsonObject result = null; try { - result = handleRequest(req, status, user); + result = handleRequest(req, user); if (result != null) { model.put(Sjm.RES, result); } else { @@ -73,7 +73,7 @@ public ModelDelete(Repository repositoryHelper, ServiceRegistry registry) { return model; } - protected JsonObject handleRequest(WebScriptRequest req, final Status status, String user) throws IOException { + protected JsonObject handleRequest(WebScriptRequest req, String user) throws IOException { JsonObject result = new JsonObject(); String date = TimeUtils.toTimestamp(new Date().getTime()); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 19542c2b..2878957a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -26,8 +26,10 @@ package gov.nasa.jpl.view_repo.webscripts; +import com.google.gson.JsonParseException; +import gov.nasa.jpl.mbee.util.TimeUtils; import java.io.IOException; -import java.sql.SQLException; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -75,6 +77,10 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { } @Override protected boolean validateRequest(WebScriptRequest req, Status status) { + // get timestamp if specified + String timestamp = req.getParameter("timestamp"); + Date dateTime = TimeUtils.dateFromTimestamp(timestamp); + String refId = getRefId(req); String projectId = getProjectId(req); EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); @@ -82,7 +88,8 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { if (refId != null && refId.equalsIgnoreCase(NO_WORKSPACE_ID)) { return true; } else if (refId != null && !emsNodeUtil.refExists(refId)) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Reference with id, %s not found", refId); + log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Reference with id, %s not found", + refId + (dateTime == null ? "" : " at " + dateTime)); return false; } return true; @@ -107,152 +114,140 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { Timer timer = new Timer(); - Map model; - String[] accepts = req.getHeaderValues("Accept"); String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; - if (logger.isDebugEnabled()) { - logger.debug(String.format("Accept: %s", accept)); - } - - model = handleElementGet(req, status, accept); + Map model = new HashMap<>(); + JsonArray elementsJson = new JsonArray(); + JsonObject result = new JsonObject(); - printFooter(user, logger, timer); + try { - return model; - } + if (validateRequest(req, status)) { + try { + Long depth = getDepthFromRequest(req); + result = handleRequest(req, depth); + elementsJson = JsonUtil.getOptArray(result, Sjm.ELEMENTS); + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); + } catch (JsonParseException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); + } + } - protected Map handleElementGet(WebScriptRequest req, Status status, String accept) { + JsonObject top = new JsonObject(); + if (elementsJson.size() == 0) { + log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); + } + if (elementsJson.size() > 0) { + top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); + } + if (top.has(Sjm.ELEMENTS) && top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { + log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); + } - Map model = new HashMap<>(); - JsonObject top = new JsonObject(); - - if (validateRequest(req, status)) { - boolean isCommit = req.getParameter(COMMITID) != null && !req.getParameter(COMMITID).isEmpty(); - try { - if (isCommit) { - JsonArray commitJsonToArray = new JsonArray(); - JsonObject commitJson = handleCommitRequest(req); - commitJsonToArray.add(commitJson); - if (commitJson.size() == 0) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); - } - if (commitJson.size() > 0) { - top.add(Sjm.ELEMENTS, filterByPermission(commitJsonToArray, req)); - } - if (top.has(Sjm.ELEMENTS) && top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); - } - } else { - JsonArray elementsJson = handleRequest(req); - if (elementsJson.size() == 0) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); - } - if (elementsJson.size() > 0) { - top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); - } - if (top.has(Sjm.ELEMENTS) && top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); + JsonArray errorMessages = new JsonArray(); + for (String level : Sjm.ERRORLEVELS) { + JsonArray errors = JsonUtil.getOptArray(result, level); + if (errors.size() > 0) { + for (int i = 0; i < errors.size(); i++) { + JsonObject errorPayload = new JsonObject(); + errorPayload.addProperty("code", HttpServletResponse.SC_NOT_FOUND); + errorPayload.add(Sjm.SYSMLID, errors.get(i)); + errorPayload.addProperty("message", + String.format("Element %s was not found", errors.get(i).getAsString())); + errorPayload.addProperty("severity", level); + errorMessages.add(errorPayload); } } - if (!Utils.isNullOrEmpty(response.toString())) - top.addProperty("message", response.toString()); - } catch (Exception e) { - log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal error", e); } - status.setCode(responseStatus.getCode()); - } - if (prettyPrint || accept.contains("webp")) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - model.put(Sjm.RES, gson.toJson(top)); - } else { - model.put(Sjm.RES, top); + if (errorMessages.size() > 0) { + top.add("messages", errorMessages); + } + + if (prettyPrint || accept.contains("webp")) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + model.put(Sjm.RES, gson.toJson(top)); + } else { + model.put(Sjm.RES, top); + } + + } catch (Exception e) { + logger.error(String.format("%s", LogUtil.getStackTrace(e))); } + status.setCode(responseStatus.getCode()); + + printFooter(user, logger, timer); + return model; } /** - * Wrapper for handling a request and getting the appropriate JSONArray of elements + * Wrapper for handling a request and getting the appropriate JSONArray of + * elements * - * @param req WebScriptRequest object - * @return JSONArray of elements + * @param req + * @return + * @throws IOException */ - private JsonArray handleRequest(WebScriptRequest req) { - // REVIEW -- Why check for errors here if validate has already been - // called? Is the error checking code different? Why? - try { - String modelId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); - String projectId = getProjectId(req); - String refId = getRefId(req); - Long depth = getDepthFromRequest(req); - boolean extended = Boolean.parseBoolean(req.getParameter("extended")); - - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - if (null == modelId) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Could not find element %s", modelId); - return new JsonArray(); - } else if (emsNodeUtil.isDeleted(modelId)) { - log(Level.ERROR, HttpServletResponse.SC_GONE, "Element %s is deleted", modelId); - return new JsonArray(); - } - - JsonObject mountsJson = new JsonObject(); - mountsJson.addProperty(Sjm.SYSMLID, projectId); - mountsJson.addProperty(Sjm.REFID, refId); - - JsonArray result = new JsonArray(); - Set elementsToFind = new HashSet<>(); - elementsToFind.add(modelId); - EmsNodeUtil.handleMountSearch(mountsJson, extended, false, depth, elementsToFind, result); - return result; - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); + protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth) throws IOException { + JsonObject requestJson = JsonUtil.buildFromString(req.getContent().getContent()); + JsonArray elementsToFindJson = new JsonArray(); + String getElementId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); + if (requestJson.has(Sjm.ELEMENTS)) { + elementsToFindJson = requestJson.get(Sjm.ELEMENTS).getAsJsonArray(); + } else if (getElementId != null) { + JsonObject element = new JsonObject(); + element.addProperty(Sjm.SYSMLID, getElementId); + elementsToFindJson.add(element); + } else { + return new JsonObject(); } - return new JsonArray(); - } - private JsonObject handleCommitRequest(WebScriptRequest req) { - // getElement at commit - String projectId = getProjectId(req); String refId = getRefId(req); - Long depth = getDepthFromRequest(req); - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - - String elementId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); - String commitId = req.getParameter(COMMITID); + String projectId = getProjectId(req); + String commitId = req.getParameter(Sjm.COMMITID.replace("_", "")); - if (emsNodeUtil.getById(elementId) != null) { - JsonObject element = emsNodeUtil.getElementByElementAndCommitId(commitId, elementId); - if (element == null || element.size() == 0) { - return emsNodeUtil.getElementAtCommit(elementId, commitId); - } else { - return element; - } - } + boolean extended = Boolean.parseBoolean(req.getParameter("extended")); JsonObject mountsJson = new JsonObject(); mountsJson.addProperty(Sjm.SYSMLID, projectId); mountsJson.addProperty(Sjm.REFID, refId); - // convert commitId to timestamp - String commit = emsNodeUtil.getCommitObject(commitId).get(Sjm.CREATED).getAsString(); - JsonArray result = new JsonArray(); - Set elementsToFind = new HashSet<>(); - elementsToFind.add(elementId); - try { - EmsNodeUtil.handleMountSearch(mountsJson, false, false, depth, elementsToFind, result, commit, "elements"); - if (result.size() > 0) { - return JsonUtil.getOptObject(result, 0); + JsonArray found = new JsonArray(); + JsonObject result = new JsonObject(); + + Set uniqueElements = new HashSet<>(); + for (int i = 0; i < elementsToFindJson.size(); i++) { + uniqueElements.add(elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); + } + + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); + + String timestamp = commitObject != null && commitObject.has(Sjm.CREATED) ? + commitObject.get(Sjm.CREATED).getAsString() : + null; + + if (getElementId == null) { + EmsNodeUtil + .handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found, timestamp, null); + } else if (commitId != null) { + if (commitObject != null) { + String commit = commitObject.get(Sjm.CREATED).getAsString(); + EmsNodeUtil + .handleMountSearch(mountsJson, false, false, maxDepth, uniqueElements, found, commit, "elements"); } - } catch (Exception e) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Could not find element %s at commit %s", - elementId, commitId); - logger.error(String.format("%s", LogUtil.getStackTrace(e))); + } else { + EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found); } - return new JsonObject(); + + result.add(Sjm.ELEMENTS, found); + JsonUtil.addStringSet(result, Sjm.WARN, uniqueElements); + + return result; } /** diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java index 9294c466..0ad63bad 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java @@ -30,7 +30,6 @@ package gov.nasa.jpl.view_repo.webscripts; import java.io.IOException; -import java.sql.SQLException; import java.util.*; import javax.servlet.http.HttpServletResponse; @@ -72,25 +71,6 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { super(repositoryHelper, registry); } - @Override protected boolean validateRequest(WebScriptRequest req, Status status) { - // get timestamp if specified - String timestamp = req.getParameter("timestamp"); - Date dateTime = TimeUtils.dateFromTimestamp(timestamp); - - String refId = getRefId(req); - String projectId = getProjectId(req); - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - if (refId != null && refId.equalsIgnoreCase(NO_WORKSPACE_ID)) { - return true; - } else if (refId != null && !emsNodeUtil.refExists(refId)) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Reference with id, %s not found", - refId + (dateTime == null ? "" : " at " + dateTime)); - return false; - } - - return true; - } - /** * Entry point */ @@ -182,54 +162,6 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { return model; } - /** - * Wrapper for handling a request and getting the appropriate JSONArray of - * elements - * - * @param req - * @return - * @throws IOException - */ - private JsonObject handleRequest(WebScriptRequest req, final Long maxDepth) throws IOException { - JsonObject requestJson = JsonUtil.buildFromString(req.getContent().getContent()); - if (requestJson.has(Sjm.ELEMENTS)) { - JsonArray elementsToFindJson = requestJson.get(Sjm.ELEMENTS).getAsJsonArray(); - - String refId = getRefId(req); - String projectId = getProjectId(req); - String commitId = req.getParameter(Sjm.COMMITID.replace("_", "")); - - boolean extended = Boolean.parseBoolean(req.getParameter("extended")); - - JsonObject mountsJson = new JsonObject(); - mountsJson.addProperty(Sjm.SYSMLID, projectId); - mountsJson.addProperty(Sjm.REFID, refId); - - JsonArray found = new JsonArray(); - JsonObject result = new JsonObject(); - - Set uniqueElements = new HashSet<>(); - for (int i = 0; i < elementsToFindJson.size(); i++) { - uniqueElements.add(elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); - } - - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); - - String timestamp = commitObject != null && commitObject.has(Sjm.CREATED) ? - commitObject.get(Sjm.CREATED).getAsString() : - null; - - EmsNodeUtil - .handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found, timestamp, null); - result.add(Sjm.ELEMENTS, found); - JsonUtil.addStringSet(result, Sjm.WARN, uniqueElements); - return result; - } else { - return new JsonObject(); - } - } - /** * Wrapper for handling a request for all elements in a project and ref and getting the appropriate JSONArray of * elements diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json index 825e211d..25063f17 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json @@ -1,3 +1,10 @@ { - "message": "[ERROR]: Element DeleteElement is deleted\n[ERROR]: No elements found.\n" -} \ No newline at end of file + "messages": [ + { + "code": 404.0, + "id": "DeleteElement", + "message": "Element DeleteElement was not found", + "severity": "warn" + } + ] +} diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json index 5d558369..f6314636 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json @@ -1,3 +1,9 @@ { - "message": "[ERROR]: No elements found.\n" -} \ No newline at end of file + "messages": [ + { + "code": 404.0, + "message": "Element DeleteResurrectElement was not found", + "severity": "warn" + } + ] +} From 52ed38bc2e69b65048ed466baf22291d13f4e41a Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Sat, 18 Aug 2018 12:57:36 -0700 Subject: [PATCH 065/126] optimize element history get --- .../java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index b49f86b5..2817bbf1 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -327,13 +327,13 @@ public JsonArray getRefHistory(String refId, String commitId, int limit) { private JsonArray filterCommitsByRefs(JsonArray commits) { JsonArray filtered = new JsonArray(); - JsonArray refHistory = getRefHistory(this.workspaceName); - List commitList = new ArrayList<>(); - for (int i = 0; i < refHistory.size(); i++) { - commitList.add(refHistory.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); + List> refCommits = pgh.getRefsCommits(this.workspaceName, 0, 0); + Set commitSet = new HashSet<>(); + for (Map commit: refCommits) { + commitSet.add((String)commit.get(Sjm.SYSMLID)); } for (int i = 0; i < commits.size(); i++) { - if (commitList.contains(commits.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString())) { + if (commitSet.contains(commits.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString())) { filtered.add(commits.get(i).getAsJsonObject()); } } From 96f76aa40b856456b7850bbccc61061f6097614d Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Mon, 20 Aug 2018 12:04:36 -0700 Subject: [PATCH 066/126] CR fixes --- .../java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 121f825b..7fdd7028 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1249,11 +1249,11 @@ private Map getQualifiedInformationForElement(JsonObject element } public JsonObject processMove(JsonArray moveData) { - HashMap elements = new HashMap<>(); - HashSet keys = new HashSet<>(); - HashMap toRemove = new HashMap<>(); - HashMap updateOwner = new HashMap<>(); - HashMap toAdd = new HashMap<>(); + Map elements = new HashMap<>(); + Set keys = new HashSet<>(); + Map> toRemove = new HashMap<>(); + Map updateOwner = new HashMap<>(); + Map> toAdd = new HashMap<>(); HashSet dbnt = new HashSet<>(); JsonObject wrapper = new JsonObject(); dbnt.add(DbNodeTypes.PACKAGE); From 7e227b4bbe122412956eaf979f5ac74be376793e Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Mon, 20 Aug 2018 12:12:21 -0700 Subject: [PATCH 067/126] CR fixes --- .../main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 7fdd7028..594e652d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1316,7 +1316,7 @@ public JsonObject processMove(JsonArray moveData) { } elements.get(key).getAsJsonObject().addProperty(Sjm.OWNERID, key); } - for (Map.Entry entry : toRemove.entrySet()) { + for (Map.Entry> entry : toRemove.entrySet()) { List value = entry.getValue(); String key = entry.getKey(); JsonArray ownedAttributeIdsToRemove = @@ -1330,7 +1330,7 @@ public JsonObject processMove(JsonArray moveData) { } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, removed); } - for (Map.Entry entry : toAdd.entrySet()) { + for (Map.Entry> entry : toAdd.entrySet()) { Map value = entry.getValue(); String key = entry.getKey(); List ownedAttributeIdsToAdd = From 73bbf0cb577a907c5691c79d254590c7c687bb75 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Mon, 20 Aug 2018 13:49:23 -0700 Subject: [PATCH 068/126] wrapper for modelPost from movePost was incorrect --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 2 +- .../baseline/GetAllElementsForMove.json | 97 ++++++++++--------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 594e652d..51f8c224 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1353,7 +1353,7 @@ public JsonObject processMove(JsonArray moveData) { toProcess.add(entry.getValue()); } - wrapper.add(Sjm.ELEMENT, toProcess); + wrapper.add(Sjm.ELEMENTS, toProcess); return wrapper; } diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json index e6b2c745..7cc2777d 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json @@ -16,12 +16,18 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "documentation": "else", - "id": "propMove3", + "documentation": "something", + "id": "oldParent", "isDerived": false, - "name": "three hundred and one", - "ownerId": "oldParent", - "type": "Property", + "name": "org parent of p", + "ownedAttributeIds": [ + "propMove", + "propMove2", + "propMove3", + "propMove4" + ], + "ownerId": "package1", + "type": "Class", "value": [ { "string": "dlam_string", @@ -35,23 +41,13 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "id": "package1", - "ownerId": "MoveModel", - "type": "Package" - }, - { - "_creator": "admin", - "_editable": true, - "_modifier": "admin", - "_projectId": "MoveModel", - "_refId": "master", + "associationId": "a1", "documentation": "else", - "id": "newParent", + "id": "propMove", "isDerived": false, - "name": "new parent of p", - "ownedAttributeIds": [], - "ownerId": "MoveModel", - "type": "Class", + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", "value": [ { "string": "dlam_string", @@ -59,6 +55,16 @@ } ] }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "package1", + "ownerId": "MoveModel", + "type": "Package" + }, { "_creator": "admin", "_editable": true, @@ -76,15 +82,12 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "documentation": "something", - "id": "oldParent", + "documentation": "else", + "id": "propMove3", "isDerived": false, - "name": "org parent of p", - "ownedAttributeIds": [ - "propMove" - ], - "ownerId": "package1", - "type": "Class", + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", "value": [ { "string": "dlam_string", @@ -98,13 +101,13 @@ "_modifier": "admin", "_projectId": "MoveModel", "_refId": "master", - "associationId": "a1", "documentation": "else", - "id": "propMove", + "id": "newParent", "isDerived": false, - "name": "three hundred and one", - "ownerId": "oldParent", - "type": "Property", + "name": "new parent of p", + "ownedAttributeIds": [], + "ownerId": "MoveModel", + "type": "Class", "value": [ { "string": "dlam_string", @@ -176,9 +179,9 @@ "clientDependencyIds": [], "documentation": "", "elementImportIds": [], - "id": "view_instances_bin_MoveModel", + "id": "holding_bin_MoveModel", "mdExtensionsIds": [], - "name": "View Instances Bin", + "name": "Holding Bin", "nameExpression": null, "ownerId": "MoveModel", "packageImportIds": [], @@ -191,16 +194,6 @@ "type": "Package", "visibility": "public" }, - { - "_creator": "admin", - "_editable": true, - "_modifier": "admin", - "_projectId": "MoveModel", - "_refId": "master", - "id": "MoveModel", - "name": "Project", - "type": "Project" - }, { "URI": null, "_appliedStereotypeIds": [], @@ -214,9 +207,9 @@ "clientDependencyIds": [], "documentation": "", "elementImportIds": [], - "id": "holding_bin_MoveModel", + "id": "view_instances_bin_MoveModel", "mdExtensionsIds": [], - "name": "Holding Bin", + "name": "View Instances Bin", "nameExpression": null, "ownerId": "MoveModel", "packageImportIds": [], @@ -228,6 +221,16 @@ "templateParameterId": null, "type": "Package", "visibility": "public" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "MoveModel", + "name": "Project", + "type": "Project" } ] } \ No newline at end of file From ffdfe6bd0aef9307882c6af81eccda98a68447ab Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 20 Aug 2018 13:51:47 -0700 Subject: [PATCH 069/126] Finish ModelGet refactor --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 6 +- .../webscripts/AbstractJavaWebScript.java | 21 +++++++ .../jpl/view_repo/webscripts/ArtifactGet.java | 2 +- .../jpl/view_repo/webscripts/ModelGet.java | 55 +++++++++---------- .../jpl/view_repo/webscripts/ModelsGet.java | 18 +----- 5 files changed, 53 insertions(+), 49 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index fcdf2b65..8f5864bb 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -213,7 +213,7 @@ public JsonArray getFullMounts(List found) { return mounts; } - public JsonObject getElementByElementAndCommitId(String commitId, String sysmlid) { + public JsonObject getElementByElementAndCommitId(String sysmlid, String commitId) { try { return eh.getElementByCommitId(commitId, sysmlid, projectId); } catch (IOException e) { @@ -222,7 +222,7 @@ public JsonObject getElementByElementAndCommitId(String commitId, String sysmlid return new JsonObject(); } - public JsonObject getArtifactByArtifactAndCommitId(String commitId, String sysmlid) { + public JsonObject getArtifactByArtifactAndCommitId(String sysmlid, String commitId) { try { return eh.getArtifactByCommitId(commitId, sysmlid, projectId); } catch (IOException e) { @@ -1771,7 +1771,7 @@ public JsonObject getElementAtCommit(String sysmlId, String commitId) { pastElement = getElementAtCommit(sysmlId, commitId, refsCommitsIds); - if (pastElement != null && pastElement.has(Sjm.SYSMLID) && deletedElementIds + if (pastElement != null && pastElement.has(Sjm.ELASTICID) && deletedElementIds .containsKey(pastElement.get(Sjm.ELASTICID).getAsString())) { pastElement = null; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index d05d3fdd..53374fd5 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -28,6 +28,8 @@ ******************************************************************************/ package gov.nasa.jpl.view_repo.webscripts; +import com.google.gson.JsonArray; +import gov.nasa.jpl.view_repo.util.Sjm; import java.util.Arrays; import java.util.Map; import java.util.regex.Matcher; @@ -252,6 +254,25 @@ protected String addLevelInfoToMsg(Level level, String msg) { } + protected JsonArray parseErrors(JsonObject result) { + JsonArray errorMessages = new JsonArray(); + for (String level : Sjm.ERRORLEVELS) { + JsonArray errors = JsonUtil.getOptArray(result, level); + if (errors.size() > 0) { + for (int i = 0; i < errors.size(); i++) { + JsonObject errorPayload = new JsonObject(); + errorPayload.addProperty("code", HttpServletResponse.SC_NOT_FOUND); + errorPayload.add(Sjm.SYSMLID, errors.get(i)); + errorPayload.addProperty("message", + String.format("Element %s was not found", errors.get(i).getAsString())); + errorPayload.addProperty("severity", level); + errorMessages.add(errorPayload); + } + } + } + return errorMessages; + } + // formatMessage function is used to catch certain objects that must be dealt with individually // formatter.format() is avoided because it applies toString() directly to objects which provide unreadable outputs protected String formatMessage(String initMsg, Object... params) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java index b9860f3d..cf23715a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java @@ -139,7 +139,7 @@ private JsonObject handleCommitRequest(WebScriptRequest req) { String artifactId = req.getServiceMatch().getTemplateVars().get(ARTIFACTID); String commitId = req.getParameter(COMMITID); if (emsNodeUtil.getArtifactById(artifactId, true) != null) { - JsonObject artifact = emsNodeUtil.getArtifactByArtifactAndCommitId(commitId, artifactId); + JsonObject artifact = emsNodeUtil.getArtifactByArtifactAndCommitId(artifactId, commitId); if (artifact == null || artifact.size() == 0) { // :TODO I don't think this logic needs to be changed at all for Artifact //this is true if element id and artifact id are mutually unique diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 2878957a..0dea7d32 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -126,7 +126,7 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { if (validateRequest(req, status)) { try { Long depth = getDepthFromRequest(req); - result = handleRequest(req, depth); + result = handleRequest(req, depth, "elements"); elementsJson = JsonUtil.getOptArray(result, Sjm.ELEMENTS); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); @@ -146,21 +146,7 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); } - JsonArray errorMessages = new JsonArray(); - for (String level : Sjm.ERRORLEVELS) { - JsonArray errors = JsonUtil.getOptArray(result, level); - if (errors.size() > 0) { - for (int i = 0; i < errors.size(); i++) { - JsonObject errorPayload = new JsonObject(); - errorPayload.addProperty("code", HttpServletResponse.SC_NOT_FOUND); - errorPayload.add(Sjm.SYSMLID, errors.get(i)); - errorPayload.addProperty("message", - String.format("Element %s was not found", errors.get(i).getAsString())); - errorPayload.addProperty("severity", level); - errorMessages.add(errorPayload); - } - } - } + JsonArray errorMessages = parseErrors(result); if (errorMessages.size() > 0) { top.add("messages", errorMessages); @@ -192,24 +178,36 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { * @return * @throws IOException */ - protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth) throws IOException { + protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, String type) throws IOException { JsonObject requestJson = JsonUtil.buildFromString(req.getContent().getContent()); JsonArray elementsToFindJson = new JsonArray(); - String getElementId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); - if (requestJson.has(Sjm.ELEMENTS)) { - elementsToFindJson = requestJson.get(Sjm.ELEMENTS).getAsJsonArray(); - } else if (getElementId != null) { + + String refId = getRefId(req); + String projectId = getProjectId(req); + String commitId = req.getParameter(Sjm.COMMITID.replace("_", "")); + String elementId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + + if (elementId != null) { + if (commitId != null && emsNodeUtil.getById(elementId) != null) { + JsonObject element = emsNodeUtil.getElementByElementAndCommitId(elementId, commitId); + if (element != null && element.size() > 0) { + JsonObject result = new JsonObject(); + JsonArray elements = new JsonArray(); + elements.add(element); + result.add(Sjm.ELEMENTS, elements); + return result; + } + } JsonObject element = new JsonObject(); - element.addProperty(Sjm.SYSMLID, getElementId); + element.addProperty(Sjm.SYSMLID, elementId); elementsToFindJson.add(element); + } else if (requestJson.has(Sjm.ELEMENTS)) { + elementsToFindJson = requestJson.get(Sjm.ELEMENTS).getAsJsonArray(); } else { return new JsonObject(); } - String refId = getRefId(req); - String projectId = getProjectId(req); - String commitId = req.getParameter(Sjm.COMMITID.replace("_", "")); - boolean extended = Boolean.parseBoolean(req.getParameter("extended")); JsonObject mountsJson = new JsonObject(); @@ -224,21 +222,20 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth) th uniqueElements.add(elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); } - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); String timestamp = commitObject != null && commitObject.has(Sjm.CREATED) ? commitObject.get(Sjm.CREATED).getAsString() : null; - if (getElementId == null) { + if (elementId == null) { EmsNodeUtil .handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found, timestamp, null); } else if (commitId != null) { if (commitObject != null) { String commit = commitObject.get(Sjm.CREATED).getAsString(); EmsNodeUtil - .handleMountSearch(mountsJson, false, false, maxDepth, uniqueElements, found, commit, "elements"); + .handleMountSearch(mountsJson, false, false, maxDepth, uniqueElements, found, commit, type); } } else { EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java index 0ad63bad..02126cf5 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java @@ -103,7 +103,7 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { try { Long depth = getDepthFromRequest(req); result = - (!req.getContent().getContent().isEmpty()) ? handleRequest(req, depth) : getAllElements(req); + (!req.getContent().getContent().isEmpty()) ? handleRequest(req, depth, "elements") : getAllElements(req); elementsJson = JsonUtil.getOptArray(result, Sjm.ELEMENTS); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); @@ -124,21 +124,7 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { top.add(Sjm.ELEMENTS, new JsonArray()); } - JsonArray errorMessages = new JsonArray(); - for (String level : Sjm.ERRORLEVELS) { - JsonArray errors = JsonUtil.getOptArray(result, level); - if (errors.size() > 0) { - for (int i = 0; i < errors.size(); i++) { - JsonObject errorPayload = new JsonObject(); - errorPayload.addProperty("code", HttpServletResponse.SC_NOT_FOUND); - errorPayload.add(Sjm.SYSMLID, errors.get(i)); - errorPayload.addProperty("message", - String.format("Element %s was not found", errors.get(i).getAsString())); - errorPayload.addProperty("severity", level); - errorMessages.add(errorPayload); - } - } - } + JsonArray errorMessages = parseErrors(result); if (errorMessages.size() > 0) { top.add("messages", errorMessages); From 751c0a93a69c5972d684ed103d01a2b978020a9d Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 20 Aug 2018 14:31:41 -0700 Subject: [PATCH 070/126] Try fixing potential npe and use milliseconds again --- .../java/gov/nasa/jpl/view_repo/db/PostgresHelper.java | 2 +- .../java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java index 2af31495..7741e1e8 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresHelper.java @@ -2080,7 +2080,7 @@ public List> getRefsCommits(String refId, int commitId, Time } if (timestamp != null) { - query.append(" AND date_trunc('seconds', timestamp) <= ?"); + query.append(" AND date_trunc('milliseconds', timestamp) <= ?"); timestampColNum = commitColNum == 3 ? 4 : 3; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 8f5864bb..c5eef6a4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1911,7 +1911,15 @@ public static Path saveToFilesystem(String filename, InputStream content) throws public static String getHostname() { ServiceDescriptorRegistry sdr = new ServiceDescriptorRegistry(); - return sdr.getSysAdminParams().getAlfrescoHost(); + String hostname = "localhost"; + try { + hostname = sdr.getSysAdminParams().getAlfrescoHost(); + } catch (Exception e) { + if (logger.isDebugEnabled()) { + logger.debug(e.getLocalizedMessage()); + } + } + return hostname; } /** From a024923a12826d2e9aebf2ef9f7fa7e4da5922fc Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Mon, 20 Aug 2018 18:15:03 -0700 Subject: [PATCH 071/126] PR fixes and tests --- .../gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 16 +++++++--------- .../nasa/jpl/view_repo/webscripts/MovePost.java | 8 +++++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 51f8c224..6ba576b8 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1253,7 +1253,7 @@ public JsonObject processMove(JsonArray moveData) { Set keys = new HashSet<>(); Map> toRemove = new HashMap<>(); Map updateOwner = new HashMap<>(); - Map> toAdd = new HashMap<>(); + Map> toAdd = new HashMap<>(); HashSet dbnt = new HashSet<>(); JsonObject wrapper = new JsonObject(); dbnt.add(DbNodeTypes.PACKAGE); @@ -1309,18 +1309,14 @@ public JsonObject processMove(JsonArray moveData) { prop.addProperty(Sjm.TYPEID, value); elements.put(prop.get(Sjm.SYSMLID).getAsString(), prop); } - - } - } elements.get(key).getAsJsonObject().addProperty(Sjm.OWNERID, key); } for (Map.Entry> entry : toRemove.entrySet()) { List value = entry.getValue(); String key = entry.getKey(); - JsonArray ownedAttributeIdsToRemove = - JsonUtil.getOptArray(elements.get(key), Sjm.OWNEDATTRIBUTEIDS); + JsonArray ownedAttributeIdsToRemove = JsonUtil.getOptArray(elements.get(key), Sjm.OWNEDATTRIBUTEIDS); JsonArray removed = new JsonArray(); for (int i = 0; i < ownedAttributeIdsToRemove.size(); i++) { @@ -1333,8 +1329,10 @@ public JsonObject processMove(JsonArray moveData) { for (Map.Entry> entry : toAdd.entrySet()) { Map value = entry.getValue(); String key = entry.getKey(); - List ownedAttributeIdsToAdd = - new Gson().fromJson(JsonUtil.getOptArray(elements.get(key), Sjm.OWNEDATTRIBUTEIDS), new TypeToken>(){}.getType()); + List ownedAttributeIdsToAdd = new Gson() + .fromJson(JsonUtil.getOptArray(elements.get(key), Sjm.OWNEDATTRIBUTEIDS), + new TypeToken>() { + }.getType()); for (Map.Entry add : value.entrySet()) { Integer index = add.getKey(); @@ -1343,7 +1341,7 @@ public JsonObject processMove(JsonArray moveData) { if (index >= ownedAttributeIdsToAdd.size()) { ownedAttributeIdsToAdd.add(id); } else { - ownedAttributeIdsToAdd.add(index, new JsonParser().parse(id)); + ownedAttributeIdsToAdd.add(index, id); } } elements.get(key).add(Sjm.OWNEDATTRIBUTEIDS, new Gson().toJsonTree(ownedAttributeIdsToAdd)); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index b25cac1e..d0eef88f 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -76,15 +76,17 @@ protected Map executeImplImpl(final WebScriptRequest req, final Timer timer = new Timer(); Map result = new HashMap(); + JsonObject moved = new JsonObject(); // call move logic try { - JsonObject moved = createDeltaForMove(req); - result = handleElementPost(req, moved, status, user); - } catch (IllegalStateException e) { + moved = createDeltaForMove(req); + } catch (Exception e) { + // 500 log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); result.put(Sjm.RES, createResponseJson()); } + result = handleElementPost(req, moved, status, user); printFooter(user, logger, timer); From 985f8221b0344b5910c704a6c402fc41b2311f1d Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 20 Aug 2018 18:18:33 -0700 Subject: [PATCH 072/126] Adding more error handling and passing deleted elements in ModelGet and ModelsGet --- .../java/gov/nasa/jpl/view_repo/util/Sjm.java | 11 ++++- .../webscripts/AbstractJavaWebScript.java | 8 ++-- .../view_repo/webscripts/ArtifactsGet.java | 17 +------ .../jpl/view_repo/webscripts/ModelGet.java | 45 +++++++++++++++---- .../output/baseline/DeleteElement.json | 29 ++++++++++-- .../suites/01__crud/01__master.robot | 2 +- 6 files changed, 80 insertions(+), 32 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java index 2d97b1c7..961c5c6a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/Sjm.java @@ -28,9 +28,11 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.servlet.http.HttpServletResponse; /** * Simple static class for keeping track of Sysml JSON mappings @@ -43,7 +45,13 @@ public class Sjm { public static final String INFO = "info"; public static final String WARN = "warn"; public static final String ERROR = "error"; - public static final List ERRORLEVELS = new ArrayList<>(Arrays.asList(INFO, WARN, ERROR)); + public static final Map ERROR_LEVELS; + static { + Map temp = new HashMap<>(); + temp.put(Sjm.FAILED, HttpServletResponse.SC_NOT_FOUND); + temp.put(Sjm.DELETED, HttpServletResponse.SC_GONE); + ERROR_LEVELS = Collections.unmodifiableMap(temp); + } public static final String RES = "res"; public static final String ELEMENTS = "elements"; @@ -54,6 +62,7 @@ public class Sjm { public static final String COMMITS = "commits"; public static final String REJECTED = "rejected"; public static final String FAILED = "failed"; + public static final String DELETED = "deleted"; public static final String AGGREGATION = "aggregation"; public static final String APPLIEDSTEREOTYPEINSTANCEID = "appliedStereotypeInstanceId"; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index 53374fd5..1a50f91a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -256,16 +256,16 @@ protected String addLevelInfoToMsg(Level level, String msg) { protected JsonArray parseErrors(JsonObject result) { JsonArray errorMessages = new JsonArray(); - for (String level : Sjm.ERRORLEVELS) { - JsonArray errors = JsonUtil.getOptArray(result, level); + + for (Map.Entry level : Sjm.ERROR_LEVELS.entrySet()) { + JsonArray errors = JsonUtil.getOptArray(result, level.getKey()); if (errors.size() > 0) { for (int i = 0; i < errors.size(); i++) { JsonObject errorPayload = new JsonObject(); - errorPayload.addProperty("code", HttpServletResponse.SC_NOT_FOUND); + errorPayload.addProperty("code", level.getValue()); errorPayload.add(Sjm.SYSMLID, errors.get(i)); errorPayload.addProperty("message", String.format("Element %s was not found", errors.get(i).getAsString())); - errorPayload.addProperty("severity", level); errorMessages.add(errorPayload); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java index 75ca9bfd..9f94929d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java @@ -110,20 +110,7 @@ public ArtifactsGet(Repository repositoryHelper, ServiceRegistry registry) { top.add(Sjm.ARTIFACTS, elements); - JsonArray errorMessages = new JsonArray(); - for (String level : Sjm.ERRORLEVELS) { - errors = JsonUtil.getOptArray(result, level); - if (errors != null && errors.size() > 0) { - for (int i = 0; i < errors.size(); i++) { - JsonObject errorPayload = new JsonObject(); - errorPayload.addProperty("code", HttpServletResponse.SC_NOT_FOUND); - errorPayload.add(Sjm.SYSMLID, errors.get(i)); - errorPayload.addProperty("message", String.format("Element %s was not found", errors.get(i))); - errorPayload.addProperty("severity", level); - errorMessages.add(errorPayload); - } - } - } + JsonArray errorMessages = parseErrors(result); if (errorMessages.size() > 0) { top.add("messages", errorMessages); @@ -189,7 +176,7 @@ private JsonObject handleRequest(WebScriptRequest req) EmsNodeUtil.handleMountSearch(mountsJson, false, false, 0L, uniqueElements, found, timestamp, "artifacts"); result.add(Sjm.ARTIFACTS, found); - JsonUtil.addStringSet(result, Sjm.WARN, uniqueElements); + JsonUtil.addStringSet(result, Sjm.FAILED, uniqueElements); return result; } else { return new JsonObject(); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 0dea7d32..50e8a443 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -26,12 +26,14 @@ package gov.nasa.jpl.view_repo.webscripts; +import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import gov.nasa.jpl.mbee.util.TimeUtils; import java.io.IOException; import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -68,6 +70,8 @@ public class ModelGet extends AbstractJavaWebScript { private static final String ELEMENTID = "elementId"; private static final String COMMITID = "commitId"; + protected Set elementsToFind = new HashSet<>(); + public ModelGet() { super(); } @@ -136,8 +140,34 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { } JsonObject top = new JsonObject(); + if (elementsJson.size() == 0) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); + if (!elementsToFind.isEmpty()) { + String refId = getRefId(req); + String projectId = getProjectId(req); + EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + JsonArray deleted = filterByPermission(emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true), req); + Set deletedSet = new HashSet<>(); + for (int i = 0; i < deleted.size(); i++) { + deletedSet.add(deleted.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); + } + + elementsToFind.removeAll(deletedSet); + + if (!deletedSet.isEmpty()) { + JsonUtil.addStringSet(result, Sjm.DELETED, deletedSet); + top.add(Sjm.DELETED, deleted); + + log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted Elements found"); + } + + if (!elementsToFind.isEmpty()) { + JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Some elements not found."); + } + } else { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "No elements to find."); + } } if (elementsJson.size() > 0) { top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); @@ -180,13 +210,13 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { */ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, String type) throws IOException { JsonObject requestJson = JsonUtil.buildFromString(req.getContent().getContent()); - JsonArray elementsToFindJson = new JsonArray(); String refId = getRefId(req); String projectId = getProjectId(req); String commitId = req.getParameter(Sjm.COMMITID.replace("_", "")); String elementId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); + JsonArray elementsToFindJson = new JsonArray(); if (elementId != null) { if (commitId != null && emsNodeUtil.getById(elementId) != null) { @@ -217,9 +247,9 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St JsonArray found = new JsonArray(); JsonObject result = new JsonObject(); - Set uniqueElements = new HashSet<>(); for (int i = 0; i < elementsToFindJson.size(); i++) { - uniqueElements.add(elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); + String currentId = elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString(); + elementsToFind.add(currentId); } JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); @@ -230,19 +260,18 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St if (elementId == null) { EmsNodeUtil - .handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found, timestamp, null); + .handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found, timestamp, null); } else if (commitId != null) { if (commitObject != null) { String commit = commitObject.get(Sjm.CREATED).getAsString(); EmsNodeUtil - .handleMountSearch(mountsJson, false, false, maxDepth, uniqueElements, found, commit, type); + .handleMountSearch(mountsJson, false, false, maxDepth, elementsToFind, found, commit, type); } } else { - EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, uniqueElements, found); + EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found); } result.add(Sjm.ELEMENTS, found); - JsonUtil.addStringSet(result, Sjm.WARN, uniqueElements); return result; } diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json index 25063f17..6635f0f5 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json @@ -1,10 +1,33 @@ { + "deleted": [ + { + "_creator": "admin", + "_editable": true, + "_inRefIds": [ + "master" + ], + "_modifier": "admin", + "_projectId": "PA", + "_refId": "master", + "documentation": "Element that will be deleted", + "id": "DeleteElement", + "isDerived": false, + "name": "Deleted Element", + "ownerId": "PA", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + } + ], "messages": [ { - "code": 404.0, + "code": 410.0, "id": "DeleteElement", - "message": "Element DeleteElement was not found", - "severity": "warn" + "message": "Element DeleteElement was not found" } ] } diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot index 4115215a..68f08af6 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot @@ -256,7 +256,7 @@ DeleteElement Should Be Equal ${result.status_code} ${200} # Try to get element ${result} = Get url=${ROOT}/projects/PA/refs/master/elements/DeleteElement headers=&{REQ_HEADER} - Should Be Equal ${result.status_code} ${404} + Should Be Equal ${result.status_code} ${410} ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} From 761a2aa42887731f6e4c98adeee1a70225de9a60 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Mon, 20 Aug 2018 18:24:11 -0700 Subject: [PATCH 073/126] PR fixes --- .../jpl/view_repo/webscripts/MovePost.java | 31 +++++++++++-------- .../suites/01__crud/04__move_post.robot | 3 -- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index d0eef88f..c3cefcc8 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletResponse; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; +import gov.nasa.jpl.view_repo.util.LogUtil; import gov.nasa.jpl.view_repo.util.Sjm; import gov.nasa.jpl.view_repo.util.JsonUtil; @@ -81,11 +82,20 @@ protected Map executeImplImpl(final WebScriptRequest req, final // call move logic try { moved = createDeltaForMove(req); - } catch (Exception e) { - // 500 + } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); result.put(Sjm.RES, createResponseJson()); + status.setCode(responseStatus.getCode()); + printFooter(user, logger, timer); + return result; + } catch (Exception e) { + logger.error(String.format("%s", LogUtil.getStackTrace(e))); + result.put(Sjm.RES, createResponseJson()); + status.setCode(responseStatus.getCode()); + printFooter(user, logger, timer); + return result; } + result = handleElementPost(req, moved, status, user); printFooter(user, logger, timer); @@ -101,18 +111,13 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req) { JsonObject moved = new JsonObject(); - try { - JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); - moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); - String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); - String src = JsonUtil.getOptString(postJson, Sjm.SOURCE); - moved.addProperty(Sjm.COMMENT, comment); - moved.addProperty(Sjm.SOURCE, src); + JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); + moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); + String src = JsonUtil.getOptString(postJson, Sjm.SOURCE); + moved.addProperty(Sjm.COMMENT, comment); + moved.addProperty(Sjm.SOURCE, src); - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); - //model.put(Sjm.RES, createResponseJson - } return moved; } diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index 3ceb330a..4c6f1a7d 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -9,7 +9,6 @@ ProjectCreationForMove ${post_json} = Get File ${CURDIR}/../../JsonData/ProjectCreationForMove.json ${result} = Post url=${ROOT}/orgs/initorg/projects data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} - PostNewElementsToMove [Documentation] "Post elements to the newly created project and organization." [Tags] crud critical 010402 @@ -21,7 +20,6 @@ PostNewElementsToMove Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${commit} = Get Commit Id ${result.json()} Set Global Variable ${commit} - GetAllElementsForMove [Documentation] "Get All the elements in the model" [Tags] mounts critical 010403 @@ -31,7 +29,6 @@ GetAllElementsForMove Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} - ChangeOwner [Documentation] "Change owner of p from b1 to b2. Remove pId from b1's list of ownedAttributeIds. Insert pId to b2's list of ownedAttributeIds at i" [Tags] crud critical 010404 From bec05a4c904e17785354aab70408b8d5abb4c562 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 21 Aug 2018 08:13:15 -0700 Subject: [PATCH 074/126] PR fix --- .../jpl/view_repo/webscripts/MovePost.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index c3cefcc8..c457daf1 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -37,6 +37,7 @@ import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Level; +import org.json.JSONObject; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; @@ -76,7 +77,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final Timer timer = new Timer(); - Map result = new HashMap(); + Map result = new HashMap<>(); JsonObject moved = new JsonObject(); // call move logic @@ -85,18 +86,15 @@ protected Map executeImplImpl(final WebScriptRequest req, final } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); result.put(Sjm.RES, createResponseJson()); - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return result; } catch (Exception e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); result.put(Sjm.RES, createResponseJson()); - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return result; + } + if (moved.has(Sjm.ELEMENTS)) { + result = handleElementPost(req, moved, status, user); } - result = handleElementPost(req, moved, status, user); + status.setCode(responseStatus.getCode()); printFooter(user, logger, timer); @@ -109,10 +107,8 @@ protected JsonObject createDeltaForMove(final WebScriptRequest req) { EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - JsonObject moved = new JsonObject(); - JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); - moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); + JsonObject moved = emsNodeUtil.processMove(postJson.get(Sjm.MOVES).getAsJsonArray()); String comment = JsonUtil.getOptString(postJson, Sjm.COMMENT); String src = JsonUtil.getOptString(postJson, Sjm.SOURCE); moved.addProperty(Sjm.COMMENT, comment); From 4d3bef1a23c90b44d1d6f7716682c5407e85d364 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 21 Aug 2018 08:23:53 -0700 Subject: [PATCH 075/126] PR fix --- .../nasa/jpl/view_repo/webscripts/ModelPost.java | 13 ++++++++----- .../suites/01__crud/04__move_post.robot | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java index 8e970e6a..af546e71 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java @@ -105,23 +105,26 @@ protected Map executeImplImpl(final WebScriptRequest req, final Timer timer = new Timer(); Map result = new HashMap(); + JsonObject postJson = new JsonObject(); try { - - JsonObject postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); - result = - handleElementPost(req, postJson, status, user); + postJson = JsonUtil.buildFromStream(req.getContent().getInputStream()).getAsJsonObject(); } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); result.put(Sjm.RES, createResponseJson()); } + + if (!postJson.has(Sjm.RES)){ + result = handleElementPost(req, postJson, status, user); + } printFooter(user, logger, timer); return result; } - protected Map handleElementPost(final WebScriptRequest req, JsonObject postJson, final Status status, String user) { + protected Map handleElementPost(final WebScriptRequest req, JsonObject postJson, + final Status status, String user) { JsonObject newElementsObject = new JsonObject(); JsonObject results; diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index 4c6f1a7d..a11e4379 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -35,6 +35,8 @@ ChangeOwner ${post_json} = Get File ${CURDIR}/../../JsonData/MoveOwner.json ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} + ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds + Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} MoveOrderInSameOwner @@ -43,6 +45,8 @@ MoveOrderInSameOwner ${post_json} = Get File ${CURDIR}/../../JsonData/MovePosition.json ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} + ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds + Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} ChangeOwnerOfMultipleElements @@ -51,6 +55,8 @@ ChangeOwnerOfMultipleElements ${post_json} = Get File ${CURDIR}/../../JsonData/MoveMultipleOwners.json ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} + ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds + Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} From c313c2d4c0f35fa4d50a437e07fa1fc29d9b47d7 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 21 Aug 2018 09:16:50 -0700 Subject: [PATCH 076/126] fix on the ownerId swap --- .../src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 2 +- .../main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index b3de3c8f..9470096f 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1311,7 +1311,7 @@ public JsonObject processMove(JsonArray moveData) { } } } - elements.get(key).getAsJsonObject().addProperty(Sjm.OWNERID, key); + elements.get(key).getAsJsonObject().addProperty(Sjm.OWNERID, value); } for (Map.Entry> entry : toRemove.entrySet()) { List value = entry.getValue(); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java index af546e71..8669fe4a 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelPost.java @@ -113,7 +113,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); result.put(Sjm.RES, createResponseJson()); } - + if (!postJson.has(Sjm.RES)){ result = handleElementPost(req, postJson, status, user); } From 321171d72f63036c643ba8e190aa3de2d069051a Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 21 Aug 2018 10:09:28 -0700 Subject: [PATCH 077/126] tests --- .../JsonData/PostMoveElements.json | 2 +- .../output/baseline/ChangeOwner.json | 96 +++++++++++++++++++ .../baseline/GetAllElementsForMove.json | 88 ++++++++--------- .../output/baseline/MoveOrderInSameOwner.json | 30 ++++++ .../suites/01__crud/04__move_post.robot | 20 ++-- 5 files changed, 181 insertions(+), 55 deletions(-) create mode 100644 mms-ent/runner/src/test/robotframework/output/baseline/ChangeOwner.json create mode 100644 mms-ent/runner/src/test/robotframework/output/baseline/MoveOrderInSameOwner.json diff --git a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json index 09b495c9..0dc7d125 100644 --- a/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json +++ b/mms-ent/runner/src/test/robotframework/JsonData/PostMoveElements.json @@ -35,7 +35,7 @@ "id": "newParent", "ownedAttributeIds": [], "name": "new parent of p", - "ownerId": "MoveModel", + "ownerId": "package2", "type": "Class", "isDerived": false, "value": [ diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/ChangeOwner.json b/mms-ent/runner/src/test/robotframework/output/baseline/ChangeOwner.json new file mode 100644 index 00000000..e77356c8 --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/output/baseline/ChangeOwner.json @@ -0,0 +1,96 @@ +{ + "_creator": "admin", + "elements": [ + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "a1", + "ownedEndIds": [ + "ap1" + ], + "ownerId": "package2", + "type": "Association" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "ap1", + "ownerId": "a1", + "type": "Property", + "typeId": "newParent" + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "associationId": "a1", + "documentation": "else", + "id": "propMove", + "isDerived": false, + "name": "three hundred and one", + "ownerId": "newParent", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "else", + "id": "newParent", + "isDerived": false, + "name": "new parent of p", + "ownedAttributeIds": [ + "propMove" + ], + "ownerId": "package2", + "type": "Class", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "something", + "id": "oldParent", + "isDerived": false, + "name": "org parent of p", + "ownedAttributeIds": [ + "propMove2", + "propMove3", + "propMove4" + ], + "ownerId": "package1", + "type": "Class", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + } + ], + "rejected": [] +} \ No newline at end of file diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json index 7cc2777d..79446359 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetAllElementsForMove.json @@ -1,5 +1,35 @@ { "elements": [ + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "else", + "id": "newParent", + "isDerived": false, + "name": "new parent of p", + "ownedAttributeIds": [], + "ownerId": "package2", + "type": "Class", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "package1", + "ownerId": "MoveModel", + "type": "Package" + }, { "_creator": "admin", "_editable": true, @@ -55,16 +85,6 @@ } ] }, - { - "_creator": "admin", - "_editable": true, - "_modifier": "admin", - "_projectId": "MoveModel", - "_refId": "master", - "id": "package1", - "ownerId": "MoveModel", - "type": "Package" - }, { "_creator": "admin", "_editable": true, @@ -102,12 +122,11 @@ "_projectId": "MoveModel", "_refId": "master", "documentation": "else", - "id": "newParent", + "id": "propMove4", "isDerived": false, - "name": "new parent of p", - "ownedAttributeIds": [], - "ownerId": "MoveModel", - "type": "Class", + "name": "three hundred and one", + "ownerId": "oldParent", + "type": "Property", "value": [ { "string": "dlam_string", @@ -147,25 +166,6 @@ } ] }, - { - "_creator": "admin", - "_editable": true, - "_modifier": "admin", - "_projectId": "MoveModel", - "_refId": "master", - "documentation": "else", - "id": "propMove4", - "isDerived": false, - "name": "three hundred and one", - "ownerId": "oldParent", - "type": "Property", - "value": [ - { - "string": "dlam_string", - "type": "LiteralString" - } - ] - }, { "URI": null, "_appliedStereotypeIds": [], @@ -194,6 +194,16 @@ "type": "Package", "visibility": "public" }, + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "id": "MoveModel", + "name": "Project", + "type": "Project" + }, { "URI": null, "_appliedStereotypeIds": [], @@ -221,16 +231,6 @@ "templateParameterId": null, "type": "Package", "visibility": "public" - }, - { - "_creator": "admin", - "_editable": true, - "_modifier": "admin", - "_projectId": "MoveModel", - "_refId": "master", - "id": "MoveModel", - "name": "Project", - "type": "Project" } ] } \ No newline at end of file diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/MoveOrderInSameOwner.json b/mms-ent/runner/src/test/robotframework/output/baseline/MoveOrderInSameOwner.json new file mode 100644 index 00000000..a75ed0c3 --- /dev/null +++ b/mms-ent/runner/src/test/robotframework/output/baseline/MoveOrderInSameOwner.json @@ -0,0 +1,30 @@ +{ + "_creator": "admin", + "elements": [ + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "MoveModel", + "_refId": "master", + "documentation": "something", + "id": "oldParent", + "isDerived": false, + "name": "org parent of p", + "ownedAttributeIds": [ + "propMove4", + "propMove3", + "propMove2" + ], + "ownerId": "package1", + "type": "Class", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + } + ], + "rejected": [] +} \ No newline at end of file diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot index a11e4379..6b8966e5 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/04__move_post.robot @@ -49,15 +49,15 @@ MoveOrderInSameOwner Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} -ChangeOwnerOfMultipleElements - [Documentation] "Swap to new owner" - [Tags] crud critical 010406 - ${post_json} = Get File ${CURDIR}/../../JsonData/MoveMultipleOwners.json - ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} - Should Be Equal ${result.status_code} ${200} - ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds - Generate JSON ${TEST_NAME} ${result.json()} ${filter} - ${compare_result} = Compare JSON ${TEST_NAME} - Should Match Baseline ${compare_result} +#ChangeOwnerOfMultipleElements +# [Documentation] "Swap to new owner" +# [Tags] crud critical 010406 +# ${post_json} = Get File ${CURDIR}/../../JsonData/MoveMultipleOwners.json +# ${result} = Post url=${ROOT}/projects/MoveModel/refs/master/propertyMove data=${post_json} headers=&{REQ_HEADER} +# Should Be Equal ${result.status_code} ${200} +# ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds +# Generate JSON ${TEST_NAME} ${result.json()} ${filter} +# ${compare_result} = Compare JSON ${TEST_NAME} +# Should Match Baseline ${compare_result} From a6f72cfe60003c5d22450c655cd82606bd4aeb89 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 21 Aug 2018 15:21:22 -0700 Subject: [PATCH 078/126] PR fix --- .../main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java | 5 ++--- .../java/gov/nasa/jpl/view_repo/webscripts/MovePost.java | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 9470096f..6d63196e 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -30,7 +30,6 @@ import gov.nasa.jpl.mbee.util.TimeUtils; import gov.nasa.jpl.view_repo.db.GraphInterface.DbEdgeTypes; import gov.nasa.jpl.view_repo.db.GraphInterface.DbNodeTypes; -import org.json.JSONObject; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -315,8 +314,8 @@ private JsonArray filterCommitsByRefs(JsonArray commits) { JsonArray filtered = new JsonArray(); List> refCommits = pgh.getRefsCommits(this.workspaceName, 0, 0); Set commitSet = new HashSet<>(); - for (Map commit: refCommits) { - commitSet.add((String)commit.get(Sjm.SYSMLID)); + for (Map commit : refCommits) { + commitSet.add((String) commit.get(Sjm.SYSMLID)); } for (int i = 0; i < commits.size(); i++) { if (commitSet.contains(commits.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString())) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index c457daf1..f9e9aecb 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -87,7 +87,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Unable to parse JSON request"); result.put(Sjm.RES, createResponseJson()); } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Cannot process move request"); result.put(Sjm.RES, createResponseJson()); } if (moved.has(Sjm.ELEMENTS)) { From 0c1b16e1695ea551b51c7d202fdd0e6d25f6d0b8 Mon Sep 17 00:00:00 2001 From: "Mann, Laura (393A-Affiliate)" Date: Tue, 21 Aug 2018 17:17:34 -0700 Subject: [PATCH 079/126] PR fix --- .../main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java index f9e9aecb..adb7607c 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MovePost.java @@ -88,6 +88,7 @@ protected Map executeImplImpl(final WebScriptRequest req, final result.put(Sjm.RES, createResponseJson()); } catch (Exception e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Cannot process move request"); + logger.error(String.format("%s", LogUtil.getStackTrace(e))); result.put(Sjm.RES, createResponseJson()); } if (moved.has(Sjm.ELEMENTS)) { From abe5c7ecfd1477f551ed09015bdd2f4bebe7f1f4 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 22 Aug 2018 04:23:47 -0700 Subject: [PATCH 080/126] Fix response codes and adjust tests for new responses --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 3 +- .../jpl/view_repo/webscripts/ModelGet.java | 60 ++++++++++++++----- .../jpl/view_repo/webscripts/ModelsGet.java | 7 ++- .../output/baseline/DeleteElement.json | 4 +- ...tCommitBetweenDeletionAndResurrection.json | 25 +++++++- ...ountedProjectsViaPAWithInvalidElement.json | 5 +- .../suites/01__crud/01__master.robot | 1 + .../02__commits.robot | 2 +- 8 files changed, 79 insertions(+), 28 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index c5eef6a4..6b85efef 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -46,7 +46,6 @@ import gov.nasa.jpl.view_repo.db.GraphInterface.DbEdgeTypes; import gov.nasa.jpl.view_repo.db.GraphInterface.DbNodeTypes; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class EmsNodeUtil { @@ -60,7 +59,7 @@ public class EmsNodeUtil { private static final String ORG_ID = "orgId"; private static final String ORG_NAME = "orgName"; - private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + public static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); public EmsNodeUtil() { try { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 50e8a443..57816a2e 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -30,10 +30,10 @@ import com.google.gson.JsonParseException; import gov.nasa.jpl.mbee.util.TimeUtils; import java.io.IOException; +import java.text.ParseException; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; @@ -55,7 +55,6 @@ import com.google.gson.JsonObject; import gov.nasa.jpl.mbee.util.Timer; -import gov.nasa.jpl.mbee.util.Utils; /** * Descriptor in /view-repo/src/main/amp/config/alfresco/extension/templates/webscripts @@ -71,6 +70,7 @@ public class ModelGet extends AbstractJavaWebScript { private static final String COMMITID = "commitId"; protected Set elementsToFind = new HashSet<>(); + protected JsonArray deletedElementsCache = new JsonArray(); public ModelGet() { super(); @@ -143,10 +143,7 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { if (elementsJson.size() == 0) { if (!elementsToFind.isEmpty()) { - String refId = getRefId(req); - String projectId = getProjectId(req); - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - JsonArray deleted = filterByPermission(emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true), req); + JsonArray deleted = filterByPermission(deletedElementsCache, req); Set deletedSet = new HashSet<>(); for (int i = 0; i < deleted.size(); i++) { deletedSet.add(deleted.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); @@ -154,24 +151,28 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { elementsToFind.removeAll(deletedSet); - if (!deletedSet.isEmpty()) { + if (!elementsToFind.isEmpty()) { + JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); + } else if (!deletedSet.isEmpty()) { JsonUtil.addStringSet(result, Sjm.DELETED, deletedSet); top.add(Sjm.DELETED, deleted); - - log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted Elements found"); + log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted elements found"); } + } - if (!elementsToFind.isEmpty()) { - JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Some elements not found."); - } - } else { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "No elements to find."); + if (responseStatus.getCode() == 200) { + log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); } + } else if (!elementsToFind.isEmpty()) { + JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + log(Level.ERROR, HttpServletResponse.SC_OK, "Some elements not found."); } + if (elementsJson.size() > 0) { top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); } + if (top.has(Sjm.ELEMENTS) && top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); } @@ -266,11 +267,40 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St String commit = commitObject.get(Sjm.CREATED).getAsString(); EmsNodeUtil .handleMountSearch(mountsJson, false, false, maxDepth, elementsToFind, found, commit, type); + } else { + elementsToFind = new HashSet<>(); } } else { EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found); } + JsonArray noexist = new JsonArray(); + + if (!elementsToFind.isEmpty()) { + deletedElementsCache = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); + if (timestamp != null) { + for (JsonElement check : deletedElementsCache) { + try { + Date created = EmsNodeUtil.df.parse(JsonUtil.getOptString((JsonObject) check, Sjm.CREATED)); + Date commitDate = EmsNodeUtil.df.parse(timestamp); + if (created.after(commitDate)) { + String currentId = check.getAsJsonObject().get(Sjm.SYSMLID).getAsString(); + elementsToFind.remove(currentId); + noexist.add(currentId); + } + } catch (ParseException pe) { + if (logger.isDebugEnabled()) { + logger.debug(pe); + } + } + } + } + } + + if (noexist.size() > 0) { + result.add(Sjm.FAILED, noexist); + } + result.add(Sjm.ELEMENTS, found); return result; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java index 02126cf5..66832e9d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java @@ -120,10 +120,15 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { } top.add(Sjm.ELEMENTS, elements); } else { - log(Level.INFO, HttpServletResponse.SC_OK, "No elements found"); + log(Level.INFO, HttpServletResponse.SC_NOT_FOUND, "No elements found"); top.add(Sjm.ELEMENTS, new JsonArray()); } + if (!elementsToFind.isEmpty()) { + JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + log(Level.ERROR, HttpServletResponse.SC_OK, "Some elements not found."); + } + JsonArray errorMessages = parseErrors(result); if (errorMessages.size() > 0) { diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json index 6635f0f5..15f23df6 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteElement.json @@ -3,9 +3,7 @@ { "_creator": "admin", "_editable": true, - "_inRefIds": [ - "master" - ], + "_inRefIds": [], "_modifier": "admin", "_projectId": "PA", "_refId": "master", diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json index f6314636..47052a4f 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetElementAtCommitBetweenDeletionAndResurrection.json @@ -1,9 +1,28 @@ { + "deleted": [ + { + "_creator": "admin", + "_editable": true, + "_modifier": "admin", + "_projectId": "PA", + "_refId": "master", + "documentation": "Element that was deleted and is resurrected", + "isDerived": false, + "name": "Resurrect Deleted Resurrect Element", + "ownerId": "PA", + "type": "Property", + "value": [ + { + "string": "dlam_string", + "type": "LiteralString" + } + ] + } + ], "messages": [ { - "code": 404.0, - "message": "Element DeleteResurrectElement was not found", - "severity": "warn" + "code": 410.0, + "message": "Element DeleteResurrectElement was not found" } ] } diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetElementsFromAllMountedProjectsViaPAWithInvalidElement.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetElementsFromAllMountedProjectsViaPAWithInvalidElement.json index 39e03780..771ff89e 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetElementsFromAllMountedProjectsViaPAWithInvalidElement.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetElementsFromAllMountedProjectsViaPAWithInvalidElement.json @@ -44,8 +44,7 @@ { "code": 404, "id": "notAnElement", - "message": "Element notAnElement was not found", - "severity": "warn" + "message": "Element notAnElement was not found" } ] -} \ No newline at end of file +} diff --git a/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot b/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot index 68f08af6..b04a96f3 100644 --- a/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot +++ b/mms-ent/runner/src/test/robotframework/suites/01__crud/01__master.robot @@ -254,6 +254,7 @@ DeleteElement # Delete element ${result} = Delete url=${ROOT}/projects/PA/refs/master/elements/DeleteElement headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${200} + Sleep ${POST_DELAY_INDEXING} # Try to get element ${result} = Get url=${ROOT}/projects/PA/refs/master/elements/DeleteElement headers=&{REQ_HEADER} Should Be Equal ${result.status_code} ${410} diff --git a/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot b/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot index 96aeb077..4a7eef07 100644 --- a/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot +++ b/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot @@ -155,7 +155,7 @@ GetElementAtCommitBetweenDeletionAndResurrection Sleep ${POST_DELAY_INDEXING} # Get element at the commit and it should be deleted ${result} = Get url=${ROOT}/projects/PA/refs/master/elements/DeleteResurrectElement?commitId=${commit_id} - Should Be Equal ${result.status_code} ${404} + Should Be Equal ${result.status_code} ${410} ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _inRefIds id Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} From c83fb451c492d403b2a026dbdea311c25b0710a8 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 22 Aug 2018 11:31:09 -0700 Subject: [PATCH 081/126] Adding migration for 3.4.0 --- .../view_repo/actions/MigrationRunner.java | 1 + .../actions/migrations/Migrate_3_4_0.java | 73 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/MigrationRunner.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/MigrationRunner.java index a2ed6d87..44ac27c8 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/MigrationRunner.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/MigrationRunner.java @@ -44,6 +44,7 @@ public class MigrationRunner extends AbstractPatch { migrationList.add(new ModuleVersionNumber("3.1.0")); migrationList.add(new ModuleVersionNumber("3.2.0")); migrationList.add(new ModuleVersionNumber("3.3.0")); + migrationList.add(new ModuleVersionNumber("3.4.0")); } public void setServices(ServiceRegistry services) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java new file mode 100644 index 00000000..57cb2875 --- /dev/null +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java @@ -0,0 +1,73 @@ +package gov.nasa.jpl.view_repo.actions.migrations; + +import com.google.gson.JsonObject; +import gov.nasa.jpl.view_repo.db.ElasticHelper; +import gov.nasa.jpl.view_repo.db.PostgresHelper; +import gov.nasa.jpl.view_repo.util.Sjm; +import java.sql.PreparedStatement; +import java.sql.Timestamp; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import org.alfresco.service.ServiceRegistry; +import org.apache.log4j.Logger; + +public class Migrate_3_4_0 { + + static Logger logger = Logger.getLogger(Migrate_3_4_0.class); + private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + + private static final String transientSettings = "{\"transient\": {\"script.max_compilations_per_minute\":120}}"; + + private static final String searchQuery = + "{\"query\":{\"bool\": {\"filter\":[{\"term\":{\"_projectId\":\"%1$s\"}},{\"term\":{\"id\":\"%2$s\"}},{\"term\":{\"_modified\":\"%3$s\"}}]}}, \"from\": 0, \"size\": 1}"; + + + public static boolean apply(ServiceRegistry services) throws Exception { + logger.info("Running Migrate_3_4_0"); + PostgresHelper pgh = new PostgresHelper(); + ElasticHelper eh = new ElasticHelper(); + + // Temporarily increase max_compilations_per_minute + eh.updateClusterSettings(transientSettings); + + boolean noErrors = true; + + List> orgs = pgh.getOrganizations(null); + + for (Map org : orgs) { + String orgId = org.get("orgId"); + List> projects = pgh.getProjects(orgId); + for (Map project : projects) { + String projectId = project.get(Sjm.SYSMLID).toString(); + pgh.setProject(projectId); + List> commits = pgh.getAllCommits(); + for (Map commit : commits) { + String commitId = commit.get("commitId"); + if (!commitId.isEmpty()) { + JsonObject commitObject = eh.getCommitByElasticId(commitId, projectId); + if (commitObject.has(Sjm.CREATED)) { + String query = "UPDATE \"commits\" SET timestamp = ? WHERE elasticid = ?"; + try (PreparedStatement statement = pgh.prepareStatement(query)) { + Date created = df.parse(commitObject.get(Sjm.CREATED).getAsString()); + Timestamp ts = new Timestamp(created.getTime()); + statement.setTimestamp(1, ts); + statement.setString(2, commitId); + statement.execute(); + } catch (ParseException pe) { + logger.info("Unable to parse date: ", pe); + } + } else { + logger.error("Commit object has no created date."); + noErrors = false; + } + } + } + } + } + + return noErrors; + } +} From 55ace1ea423003f5490415ea868f3722c7ea72c0 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 22 Aug 2018 13:28:06 -0700 Subject: [PATCH 082/126] Cleanup logic --- .../jpl/view_repo/webscripts/ModelGet.java | 22 +++++-------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 57816a2e..11d410f4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -259,19 +259,11 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St commitObject.get(Sjm.CREATED).getAsString() : null; - if (elementId == null) { - EmsNodeUtil - .handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found, timestamp, null); - } else if (commitId != null) { - if (commitObject != null) { - String commit = commitObject.get(Sjm.CREATED).getAsString(); - EmsNodeUtil - .handleMountSearch(mountsJson, false, false, maxDepth, elementsToFind, found, commit, type); - } else { - elementsToFind = new HashSet<>(); - } + if (commitId != null && commitObject == null) { + elementsToFind = new HashSet<>(); } else { - EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found); + EmsNodeUtil + .handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found, timestamp, type); } JsonArray noexist = new JsonArray(); @@ -314,7 +306,7 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St * parameter) */ Long getDepthFromRequest(WebScriptRequest req) { - Long depth = null; + long depth = 0L; String depthParam = req.getParameter("depth"); if (depthParam != null) { depth = parseDepth(depthParam); @@ -329,10 +321,6 @@ Long getDepthFromRequest(WebScriptRequest req) { depth = 100000L; } - if (depth == null) { - depth = 0L; - } - return depth; } From 609f520273d2a639aa61f545bf04ccea2749f823 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 22 Aug 2018 13:35:58 -0700 Subject: [PATCH 083/126] Fix boxed type never null --- .../main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 11d410f4..c710ffaa 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -325,7 +325,7 @@ Long getDepthFromRequest(WebScriptRequest req) { } Long parseDepth(String depthParam) { - Long depth = 0L; + long depth = 0L; try { depth = Long.parseLong(depthParam); if (depth < 0) { From 9032b397c3f7ff03aef90b86bdac11fe7a202c5b Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 22 Aug 2018 18:04:08 -0700 Subject: [PATCH 084/126] Add update method for elasticsearch elements and update ref objects instead of creating new objects --- mms-ent/clean.sh | 2 +- .../nasa/jpl/view_repo/db/ElasticHelper.java | 37 +++++++++++++++++++ .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 12 +++++- .../view_repo/webscripts/WorkspacesPost.java | 5 ++- 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/mms-ent/clean.sh b/mms-ent/clean.sh index 5929a9cf..04232059 100755 --- a/mms-ent/clean.sh +++ b/mms-ent/clean.sh @@ -130,7 +130,7 @@ expect eof EOD $EXPECT < entry : updateOwner.entrySet()) { String value = entry.getValue(); String key = entry.getKey(); - if (elements.get(key).has(Sjm.ASSOCIATIONID)) { + if (elements.containsKey(key) && elements.get(key).has(Sjm.ASSOCIATIONID)) { String associationId = elements.get(key).get(Sjm.ASSOCIATIONID).getAsString(); String ownerParentPackage = pgh.getImmediateParentOfType(value, DbEdgeTypes.CONTAINMENT, dbnt); JsonObject associationObj = getNodeBySysmlid(associationId); @@ -1591,6 +1591,16 @@ public String insertSingleElastic(JsonObject o) { return null; } + public String updateSingleElastic(JsonObject o) { + try { + ElasticResult r = eh.updateElement(o, projectId, ElasticHelper.ELEMENT); + return r.elasticId; + } catch (IOException e) { + logger.debug(String.format("%s", LogUtil.getStackTrace(e))); + } + return null; + } + private static Map getSysmlMap(JsonArray elements) { Map sysmlid2elements = new HashMap<>(); for (int i = 0; i < elements.size(); i++) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index 8e213ad7..d601374f 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -282,9 +282,12 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String return null; } + JsonObject existingWsJson = emsNodeUtil.getRefJson(newWorkspaceId); + wsJson.addProperty(Sjm.MODIFIED, date); wsJson.addProperty(Sjm.MODIFIER, user); - elasticId = emsNodeUtil.insertSingleElastic(wsJson); + wsJson.addProperty(Sjm.ELASTICID, existingWsJson.get(Sjm.ELASTICID).getAsString()); + elasticId = emsNodeUtil.updateSingleElastic(wsJson); emsNodeUtil.updateRef(newWorkspaceId, workspaceName, elasticId, isTag); } From 526ff49aca596d21e6f0fd60c62e277d03cf9df0 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Wed, 22 Aug 2018 18:26:21 -0700 Subject: [PATCH 085/126] simplify status codes for model get --- .../jpl/view_repo/webscripts/ModelGet.java | 64 +++++++------------ .../02__commits.robot | 2 +- 2 files changed, 25 insertions(+), 41 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index c710ffaa..0c116b92 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -141,40 +141,27 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { JsonObject top = new JsonObject(); - if (elementsJson.size() == 0) { - if (!elementsToFind.isEmpty()) { - JsonArray deleted = filterByPermission(deletedElementsCache, req); + if (elementsJson.size() > 0) { + top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); + if (top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { + log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); + } + } else if (deletedElementsCache.size() > 0) { + JsonArray deleted = filterByPermission(deletedElementsCache, req); + if (deleted.size() > 0) { Set deletedSet = new HashSet<>(); for (int i = 0; i < deleted.size(); i++) { deletedSet.add(deleted.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); } - elementsToFind.removeAll(deletedSet); - - if (!elementsToFind.isEmpty()) { - JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); - } else if (!deletedSet.isEmpty()) { - JsonUtil.addStringSet(result, Sjm.DELETED, deletedSet); - top.add(Sjm.DELETED, deleted); - log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted elements found"); - } - } - - if (responseStatus.getCode() == 200) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); + JsonUtil.addStringSet(result, Sjm.DELETED, deletedSet); + top.add(Sjm.DELETED, deleted); + log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted elements found"); } - } else if (!elementsToFind.isEmpty()) { - JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); - log(Level.ERROR, HttpServletResponse.SC_OK, "Some elements not found."); } - - if (elementsJson.size() > 0) { - top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); - } - - if (top.has(Sjm.ELEMENTS) && top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); + if (!elementsToFind.isEmpty()) { + JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); } JsonArray errorMessages = parseErrors(result); @@ -249,8 +236,10 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St JsonObject result = new JsonObject(); for (int i = 0; i < elementsToFindJson.size(); i++) { - String currentId = elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString(); - elementsToFind.add(currentId); + try { + String currentId = elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString(); + elementsToFind.add(currentId); + } catch (Exception e) {} } JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); @@ -261,24 +250,21 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St if (commitId != null && commitObject == null) { elementsToFind = new HashSet<>(); + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Invalid commit id"); } else { EmsNodeUtil .handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found, timestamp, type); } - JsonArray noexist = new JsonArray(); - if (!elementsToFind.isEmpty()) { - deletedElementsCache = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); + JsonArray deletedElementsCache = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); if (timestamp != null) { for (JsonElement check : deletedElementsCache) { try { Date created = EmsNodeUtil.df.parse(JsonUtil.getOptString((JsonObject) check, Sjm.CREATED)); Date commitDate = EmsNodeUtil.df.parse(timestamp); - if (created.after(commitDate)) { - String currentId = check.getAsJsonObject().get(Sjm.SYSMLID).getAsString(); - elementsToFind.remove(currentId); - noexist.add(currentId); + if (!created.after(commitDate)) { + this.deletedElementsCache.add(check); } } catch (ParseException pe) { if (logger.isDebugEnabled()) { @@ -286,13 +272,11 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St } } } + } else { + this.deletedElementsCache = deletedElementsCache; } } - if (noexist.size() > 0) { - result.add(Sjm.FAILED, noexist); - } - result.add(Sjm.ELEMENTS, found); return result; diff --git a/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot b/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot index 4a7eef07..85ab5cc1 100644 --- a/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot +++ b/mms-ent/runner/src/test/robotframework/suites/09__branches_and_history/02__commits.robot @@ -87,7 +87,7 @@ GetElementAtInvalidCommit [Documentation] "Try to get an element at an invalid commit." [Tags] branches critical 090208 ${result} = Get url=${ROOT}/projects/PA/refs/master/elements/300?commitId=ThisIdShouldNotExistAtAll headers=&{REQ_HEADER} - Should be Equal ${result.status_code} ${404} + Should be Equal ${result.status_code} ${400} BranchFromBranchAndCheckCommits [Documentation] "Create branch1, create branch 2 immediately from branch 1, getting branch history from branch 1 and branch 2 should be the same." From 2166f3eed2b476daf8ec48b4513528532a6f9ba2 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Thu, 23 Aug 2018 10:16:12 -0700 Subject: [PATCH 086/126] cleaning --- .../jpl/javawebscripts/hostname.get.json.ftl | 1 - .../gov/nasa/jpl/mms/diff.get.desc.xml | 13 - .../gov/nasa/jpl/mms/diff.get.json.ftl | 1 - .../gov/nasa/jpl/mms/diff.post.desc.xml | 13 - .../gov/nasa/jpl/mms/diff.post.json.ftl | 1 - .../gov/nasa/jpl/mms/mmsversion.get.json.ftl | 1 - .../nasa/jpl/mms/orgs/orgs.delete.json.ftl | 1 - .../gov/nasa/jpl/mms/orgs/orgs.get.json.ftl | 1 - .../gov/nasa/jpl/mms/orgs/orgs.post.json.ftl | 1 - .../nasa/jpl/mms/orgs/projects.post.json.ftl | 1 - .../gov/nasa/jpl/mms/ref.get.json.ftl | 1 - .../gov/nasa/jpl/mms/refs.delete.json.ftl | 1 - .../gov/nasa/jpl/mms/refs.get.json.ftl | 1 - .../gov/nasa/jpl/mms/refs.post.json.ftl | 1 - .../mms/refs/artifacts/artifact.get.json.ftl | 1 - .../mms/refs/artifacts/artifact.post.json.ftl | 1 - .../refs/artifacts/artifacts.delete.json.ftl | 1 - .../mms/refs/artifacts/artifacts.get.json.ftl | 1 - .../mms/refs/artifacts/artifacts.put.json.ftl | 1 - .../nasa/jpl/mms/refs/convert.post.json.ftl | 1 - .../nasa/jpl/mms/refs/documents.get.json.ftl | 1 - .../jpl/mms/refs/elements/cfids.get.json.ftl | 1 - .../mms/refs/elements/element.get.json.ftl | 1 - .../refs/elements/elements.delete.json.ftl | 1 - .../mms/refs/elements/elements.get.json.ftl | 1 - .../mms/refs/elements/elements.post.json.ftl | 1 - .../mms/refs/elements/elements.put.json.ftl | 1 - .../jpl/mms/refs/elements/moves.post.json.ftl | 1 - .../jpl/mms/refs/history/element.get.json.ftl | 1 - .../jpl/mms/refs/history/ref.get.json.ftl | 1 - .../gov/nasa/jpl/mms/refs/mounts.get.json.ftl | 1 - .../nasa/jpl/mms/refs/search.post.json.ftl | 1 - .../gov/nasa/jpl/mms/refs/search.put.json.ftl | 1 - .../gov/nasa/jpl/mms/refs/sites.get.json.ftl | 1 - .../jpl/mms/users/preferences.get.json.ftl | 1 - .../jpl/mms/users/preferences.post.json.ftl | 1 - .../jpl/view_repo/actions/ActionUtil.java | 4 +- .../nasa/jpl/view_repo/util/CommitUtil.java | 12 +- .../jpl/view_repo/util/EmsScriptNode.java | 304 +----------------- .../webscripts/AbstractJavaWebScript.java | 249 +------------- .../jpl/view_repo/webscripts/AllFlagsGet.java | 27 +- .../view_repo/webscripts/ArtifactPost.java | 6 +- .../webscripts/DeclarativeJavaWebScript.java | 141 ++------ .../view_repo/webscripts/DocumentsGet.java | 8 - .../webscripts/HtmlConverterPost.java | 2 - .../jpl/view_repo/webscripts/MmsVersion.java | 7 +- .../nasa/jpl/view_repo/webscripts/OrgGet.java | 5 +- .../jpl/view_repo/webscripts/OrgPost.java | 1 - .../jpl/view_repo/webscripts/ProjectPost.java | 16 +- .../jpl/view_repo/webscripts/SiteGet.java | 7 +- .../view_repo/webscripts/WorkspaceDelete.java | 13 +- .../view_repo/webscripts/WorkspacesPost.java | 6 +- 52 files changed, 65 insertions(+), 803 deletions(-) delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/javawebscripts/hostname.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.desc.xml delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.desc.xml delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/mmsversion.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.delete.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/projects.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/ref.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.delete.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.delete.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.put.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/convert.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/documents.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/cfids.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/element.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.delete.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.put.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/element.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/ref.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/mounts.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.post.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.put.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/sites.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.get.json.ftl delete mode 100644 mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.post.json.ftl diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/javawebscripts/hostname.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/javawebscripts/hostname.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/javawebscripts/hostname.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.desc.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.desc.xml deleted file mode 100644 index 18b2dc80..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.desc.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - get diffs - - get diffs - - /projects/{projectId}/diff/{workspace1}/{workspace2}/{timestamp1}/{timestamp2} - argument - user - required - MMS REST API - diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.desc.xml b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.desc.xml deleted file mode 100644 index 902427c6..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.desc.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - post diffs - - Post the passed diff json changes to the target workspace. In the json file, assumes the target workspace is workspace1, and the source workspace is workspace2. - - /projects/{projectId}/diff?timestamp1={timestamp1}&timestamp2={timestamp2} - argument - user - required - MMS REST API - diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/diff.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/mmsversion.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/mmsversion.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/mmsversion.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.delete.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.delete.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.delete.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/orgs.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/projects.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/projects.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/orgs/projects.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/ref.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/ref.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/ref.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.delete.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.delete.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.delete.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifact.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.delete.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.delete.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.delete.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.put.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.put.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/artifacts/artifacts.put.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/convert.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/convert.post.json.ftl deleted file mode 100644 index b384c63c..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/convert.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/documents.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/documents.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/documents.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/cfids.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/cfids.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/cfids.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/element.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/element.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/element.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.delete.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.delete.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.delete.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.put.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.put.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/elements.put.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/elements/moves.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/element.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/element.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/element.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/ref.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/ref.get.json.ftl deleted file mode 100644 index b384c63c..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/history/ref.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/mounts.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/mounts.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/mounts.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.put.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.put.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/search.put.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/sites.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/sites.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/refs/sites.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.get.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.get.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.get.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.post.json.ftl b/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.post.json.ftl deleted file mode 100644 index 1897f75d..00000000 --- a/mms-ent/repo-amp/src/main/amp/config/alfresco/extension/templates/webscripts/gov/nasa/jpl/mms/users/preferences.post.json.ftl +++ /dev/null @@ -1 +0,0 @@ -${res} \ No newline at end of file diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java index a9882963..255b20cd 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java @@ -56,8 +56,8 @@ private ActionUtil() { * @param services */ public static void sendEmailToModifier(EmsScriptNode node, String msg, String subject, ServiceRegistry services) { - String username = (String)node.getProperty("cm:modifier", false); - EmsScriptNode user = new EmsScriptNode(services.getPersonService().getPerson(username), services, new StringBuffer()); + String username = (String)node.getProperty("cm:modifier"); + EmsScriptNode user = new EmsScriptNode(services.getPersonService().getPerson(username), services); String recipient = (String) user.getProperty("cm:email"); String sender = EmsNodeUtil.getHostname() + "@jpl.nasa.gov"; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index 8af570b4..3fbe6537 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -916,20 +916,20 @@ public static boolean createOrUpdateSiteChar(JsonObject siteChar, String project EmsScriptNode documentLibrary = site.childByNamePath("documentLibrary"); if (documentLibrary == null) { - documentLibrary = site.createFolder("documentLibrary", null, null); - documentLibrary.createOrUpdateProperty(Acm.CM_TITLE, "Document Library"); + documentLibrary = site.createFolder("documentLibrary", null); + documentLibrary.setProperty(Acm.CM_TITLE, "Document Library"); } EmsScriptNode projectDocumentLibrary = documentLibrary.childByNamePath(projectId); if (projectDocumentLibrary == null) { - projectDocumentLibrary = documentLibrary.createFolder(projectId, null, null); + projectDocumentLibrary = documentLibrary.createFolder(projectId, null); } EmsScriptNode siteCharFolder = projectDocumentLibrary.childByNamePath(folderId); if (siteCharFolder == null) { - siteCharFolder = projectDocumentLibrary.createFolder(folderId, null, null); - siteCharFolder.createOrUpdateProperty(Acm.CM_TITLE, folderName); + siteCharFolder = projectDocumentLibrary.createFolder(folderId, null); + siteCharFolder.setProperty(Acm.CM_TITLE, folderName); return true; } else { - siteCharFolder.createOrUpdateProperty(Acm.CM_TITLE, folderName); + siteCharFolder.setProperty(Acm.CM_TITLE, folderName); return true; } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java index e5fe2862..d587c489 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java @@ -76,40 +76,11 @@ public class EmsScriptNode extends ScriptNode { static Logger logger = Logger.getLogger(ScriptNode.class); - public static boolean skipSvgToPng = false; - public static Repository repository = null; public static ServiceRegistry services = null; - // provide logging capability of what is done - private StringBuffer response = null; - - // provide status as necessary - private Status status = null; - - protected EmsScriptNode workspace = null; - - /** - * Replicates the behavior of ScriptNode versions, which is private. - */ - protected Object[] myVersions = null; - - public AbstractJavaWebScript webscript = null; - - // TODO add nodeService and other member variables when no longer - // subclassing ScriptNode - // extend Serializable after removing ScriptNode extension - - public EmsScriptNode(NodeRef nodeRef, ServiceRegistry services, StringBuffer response, Status status) { - this(nodeRef, services); - EmsScriptNode.services = services; - setStatus(status); - } - - public EmsScriptNode(NodeRef nodeRef, ServiceRegistry services, StringBuffer response) { - this(nodeRef, services); - EmsScriptNode.services = services; - setResponse(response); + public EmsScriptNode(NodeRef nodeRef, ServiceRegistry services) { + super(nodeRef, services); } public static Repository getRepository() { @@ -124,32 +95,6 @@ public static void setServices(ServiceRegistry services) { EmsScriptNode.services = services; } - /** - * Create a version of this document. Note: this will add the cm:versionable aspect. - * - * @param history Version history note - * @param majorVersion True to save as a major version increment, false for minor version. - * @return ScriptVersion object representing the newly added version node - */ - @Override public ScriptVersion createVersion(String history, boolean majorVersion) { - this.myVersions = null; - return super.createVersion(history, majorVersion); - } - - /** - * Check-in a working copy document. The current state of the working copy is copied to the - * original node, this will include any content updated in the working node. Note that this - * method can only be called on a working copy Node. - * - * @param history Version history note - * @param majorVersion True to save as a major version increment, false for minor version. - * @return the original Node that was checked out. - */ - @Override public ScriptNode checkin(String history, boolean majorVersion) { - this.myVersions = null; - return super.checkin(history, majorVersion); - } - /** * @see org.alfresco.repo.jscript.ScriptNode#childByNamePath(java.lang.String) */ @@ -169,68 +114,21 @@ public static void setServices(ServiceRegistry services) { if (child == null || !child.exists()) { return null; } - EmsScriptNode childNode = new EmsScriptNode(child.getNodeRef(), services, response); + EmsScriptNode childNode = new EmsScriptNode(child.getNodeRef(), services); return childNode; } @Override public EmsScriptNode createFile(String name) { - EmsScriptNode fileNode = new EmsScriptNode(super.createFile(name).getNodeRef(), services, response, status); + EmsScriptNode fileNode = new EmsScriptNode(super.createFile(name).getNodeRef(), services); return fileNode; } - public EmsScriptNode createFolder(String name, String type, NodeRef sourceFolder) { - if (logger.isInfoEnabled()) { - logger.info("creating " + name + " in " + sourceFolder); - } - + public EmsScriptNode createFolder(String name, String type) { NodeRef folderRef = super.createFolder(name, type).getNodeRef(); - EmsScriptNode folder = new EmsScriptNode(folderRef, services, response, status); - + EmsScriptNode folder = new EmsScriptNode(folderRef, services); return folder; } - /** - * Check whether or not a node has a property, update or create as necessary - * - * NOTE: this only works for non-collection properties - for collections handwrite (or see how - * it's done in ModelPost.java) - * - * @param acmType Short name for the Alfresco Content Model type - * @param value Value to set property to - * @return true if property updated, false otherwise (e.g., value did not change) - */ - public boolean createOrUpdateProperty(String acmType, T value) { - - T oldValue = (T) getNodeRefProperty(acmType); - if (oldValue != null && value != null) { - if (!value.equals(oldValue)) { - setProperty(acmType, value); - log(getName() + ": " + acmType + " property updated to value = " + value); - return true; - } - } - // Note: Per CMED-461, we are allowing properties to be set to null - else { - log(getName() + ": " + acmType + " property created with value = " + value); - boolean changed = setProperty(acmType, value); - // If setting the property to null, the modified time is not changed - // by alfresco if - // it was previously null, which is the initial state of the - // property, but we want - // the modification time to be altered in this case too: - if (oldValue == null && value == null) { - setProperty("cm:modified", new Date(), false, 0); - } - if (!changed) { - logger.warn( - "Failed to set property for new value in createOrUpdateProperty(" + acmType + ", " + value + ")"); - } - return changed; - } - - return false; - } - /** * Override createNode to return an EmsScriptNode * @@ -239,8 +137,6 @@ public boolean createOrUpdateProperty(String acmType, T * @return created child EmsScriptNode */ @Override public EmsScriptNode createNode(String name, String type) { - - EmsScriptNode result = null; Map props = new HashMap<>(1, 1.0f); @@ -252,43 +148,22 @@ public boolean createOrUpdateProperty(String acmType, T ChildAssociationRef assoc = services.getNodeService().createNode(nodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, QName.createValidLocalName(name)), createQName(type), props); - result = new EmsScriptNode(assoc.getChildRef(), services, response); + result = new EmsScriptNode(assoc.getChildRef(), services); } catch (Exception e) { logger.error( "Got exception in " + "createNode(name=" + name + ", type=" + type + ") for EmsScriptNode(" + this + ") calling createNode(nodeRef=" + nodeRef + ", . . .)"); e.printStackTrace(); } - - } else { - log("Could not find type " + type); } - return result; } - @Override public String getName() { - super.getName(); - return (String) getProperty(Acm.CM_NAME); - } - @Override public EmsScriptNode getParent() { ScriptNode myParent = super.getParent(); if (myParent == null) return null; - return new EmsScriptNode(myParent.getNodeRef(), services, response); - } - - /** - * Getting a noderef property needs to be contextualized by the workspace and time This works - * for any property type noderef or otherwise, so use this if you want to be safe. - * - * @param acmType - * @return - */ - public Object getNodeRefProperty(String acmType) { - Object result = getPropertyImpl(acmType, true); - return result; + return new EmsScriptNode(myParent.getNodeRef(), services); } /** @@ -299,33 +174,12 @@ public Object getNodeRefProperty(String acmType) { * @return */ public Object getProperty(String acmType) { - return getProperty(acmType, true); - } - - /** - * Get the property of the specified type for non-noderef properties. Throws unsupported - * operation exception otherwise (go and fix the code if that happens). - * - * @param acmType Short name of property to get - * @param cacheOkay - * @return - */ - public Object getProperty(String acmType, boolean cacheOkay) { - Object result = getPropertyImpl(acmType, cacheOkay); - return result; - } - - private Object getPropertyImpl(String acmType, boolean cacheOkay) { NodeRef nodeRef = this.getNodeRef(); if (nodeRef == null || acmType == null) { return null; } if (acmType.isEmpty()) { - if (logger.isTraceEnabled()) { - logger.trace( - "getNodeProperty(" + nodeRef + ", " + acmType + ", cacheOkay=" + cacheOkay + ") = null. No Key!"); - } return null; } QName qName = createQName(acmType, services); @@ -334,16 +188,7 @@ private Object getPropertyImpl(String acmType, boolean cacheOkay) { services = getServices(); } result = services.getNodeService().getProperty(nodeRef, qName); - if (logger.isTraceEnabled()) { - logger.trace( - "^ cache miss! getNodeProperty(" + nodeRef + ", " + acmType + ", cacheOkay=" + cacheOkay + ") = " - + result); - } - if (logger.isTraceEnabled()) { - logger.trace("getNodeProperty(" + nodeRef + ", " + acmType + ", cacheOkay=" + cacheOkay + ") = " + result); - } return result; - } /** @@ -360,22 +205,6 @@ private Object getPropertyImpl(String acmType, boolean cacheOkay) { return result; } - public StringBuffer getResponse() { - return response; - } - - public Status getStatus() { - return status; - } - - /** - * Append onto the response for logging purposes - * - * @param msg Message to be appened to response TODO: fix logger for EmsScriptNode - */ - public void log(String msg) { - } - /** * Genericized function to set property for non-collection types * @@ -383,13 +212,6 @@ public void log(String msg) { * @param value Value to set property to */ public boolean setProperty(String acmType, T value) { - return setProperty(acmType, value, true, 0); - } - - public boolean setProperty(String acmType, T value, boolean cacheOkay, - // count prevents inf - // loop - int count) { if (logger.isDebugEnabled()) logger.debug("setProperty(acmType=" + acmType + ", value=" + value + ")"); boolean success = true; @@ -402,14 +224,6 @@ public boolean setProperty(String acmType, T value, boo return success; } - public void setResponse(StringBuffer response) { - this.response = response; - } - - public void setStatus(Status status) { - this.status = status; - } - /** * Checks whether user has permissions to the node and logs results and status as appropriate * @@ -487,94 +301,14 @@ public boolean checkPermissions(String permissions, StringBuffer response, Statu return b; } - /** - * Override equals for EmsScriptNodes - * - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override public boolean equals(Object obj) { - return equals(obj, true); - } - @Override public int hashCode() { return parent.hashCode(); } - /** - * @return the head or current version of the node ref if it exists; otherwise return the - * existing node ref - */ - public NodeRef normalizedNodeRef() { - VersionService vs = getServices().getVersionService(); - Version thisHeadVersion = this.getHeadVersion(); - NodeRef thisCurrent = thisHeadVersion == null ? null : thisHeadVersion.getVersionedNodeRef(); - if (thisCurrent == null) { - Version thisCurrentVersion = vs.getCurrentVersion(this.nodeRef); - thisCurrent = thisCurrentVersion == null ? null : thisCurrentVersion.getVersionedNodeRef(); - } - if (thisCurrent == null) - return nodeRef; - return thisCurrent; - } - - /** - * Check to see if the nodes are the same or (if tryCurrentVersions is true) if their - * currentVersions are the same. - * - * @param obj - * @param tryCurrentVersions - * @return true iff equal - */ - public boolean equals(Object obj, boolean tryCurrentVersions) { - - if (!(obj instanceof EmsScriptNode)) - return false; - EmsScriptNode that = (EmsScriptNode) obj; - boolean same = this.nodeRef.equals(that.nodeRef); - if (same || !tryCurrentVersions) - return same; - - // See if they are different versions of the same node. - VersionService vs = getServices().getVersionService(); - boolean isThisV = vs.isAVersion(this.nodeRef); - boolean isThatV = vs.isAVersion(that.nodeRef); - if (!isThisV && !isThatV) - return same; - NodeRef thisCurrent = this.normalizedNodeRef(); - NodeRef thatCurrent = that.normalizedNodeRef(); - if (thisCurrent == thatCurrent) - return true; - if (thisCurrent == null || thatCurrent == null) - return false; - return thisCurrent.equals(thatCurrent); - } - - /** - * Override exists for EmsScriptNodes - * - * @see org.alfresco.repo.jscript.ScriptNode#exists() - */ - @Override public boolean exists() { - return exists(false); - } - - public boolean exists(boolean includeDeleted) { - if (!scriptNodeExists()) - return false; - return !(!includeDeleted && hasAspect("ems:Deleted")); - } - - public boolean scriptNodeExists() { - return super.exists(); - } - public static ServiceRegistry getServices() { return services; } - public EmsScriptNode(NodeRef nodeRef, ServiceRegistry services) { - super(nodeRef, services); - } /************************** * Miscellaneous functions @@ -591,13 +325,6 @@ public Version getHeadVersion() { return headVersion; } - @Override public boolean removeAspect(String type) { - if (hasAspect(type)) { - return super.removeAspect(type); - } - return true; - } - public static EmsScriptNode getSiteNode(String sysmlid) { if (sysmlid == null) { return null; @@ -609,7 +336,7 @@ public static EmsScriptNode getSiteNode(String sysmlid) { } SiteInfo si = services.getSiteService().getSite(sysmlid); if (si != null) { - EmsScriptNode site = new EmsScriptNode(si.getNodeRef(), services, null); + EmsScriptNode site = new EmsScriptNode(si.getNodeRef(), services); if (changeUser) { AuthenticationUtil.setRunAsUser(runAsUser); } @@ -621,13 +348,6 @@ public static EmsScriptNode getSiteNode(String sysmlid) { return null; } - public void delete() { - if (!checkPermissions(PermissionService.WRITE, getResponse(), getStatus())) { - log("no write permissions to delete workpsace " + getName()); - return; - } - } - /** * Returns a list of all the groups the passed user belongs to. Note, there is no java interface * for this, so this code is based on what the javascript interface does. @@ -732,9 +452,9 @@ public static EmsScriptNode updateOrCreateArtifact(String artifactId, Path fileP artifactNode.addAspect("cm:indexControl"); } - artifactNode.createOrUpdateProperty(Acm.CM_TITLE, artifactId); - artifactNode.createOrUpdateProperty("cm:isIndexed", true); - artifactNode.createOrUpdateProperty("cm:isContentIndexed", false); + artifactNode.setProperty(Acm.CM_TITLE, artifactId); + artifactNode.setProperty("cm:isIndexed", true); + artifactNode.setProperty("cm:isContentIndexed", false); if (logger.isDebugEnabled()) { logger.debug("Creating artifact with indexing: " + artifactNode.getProperty("cm:isIndexed")); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index 1a50f91a..49073aef 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -179,40 +179,12 @@ protected void log(Level level, int code, Exception e) { } } - // only logging loglevel and a message (no code) - protected void log(Level level, String msg, Object... params) { - if (level.toInt() >= logger.getLevel().toInt()) { - String formattedMsg = formatMessage(msg, params); //formatter.format (msg,params).toString(); - String levelMessage = addLevelInfoToMsg(level, formattedMsg); - //TODO: unsure if need to call responseStatus.setMessage(...) since there is no code - response.append(levelMessage); - log(level, levelMessage); - } - } - - // only logging code and a message (no loglevel, and thus, no check for log level status) - protected void log(int code, String msg, Object... params) { - String formattedMsg = formatMessage(msg, params); //formatter.format (msg,params).toString(); - updateResponse(code, formattedMsg); - } - - protected void log(String msg, Object... params) { - String formattedMsg = formatMessage(msg, params); //formatter.format (msg,params).toString(); - log(formattedMsg); - } - protected void updateResponse(int code, String msg) { response.append(msg); responseStatus.setCode(code); responseStatus.setMessage(msg); } - protected void log(String msg) { - response.append(msg + System.lineSeparator()); - //TODO: add to responseStatus too (below)? - //responseStatus.setMessage(msg); - } - protected static void log(Level level, Exception e) { log(level, LogUtil.getStackTrace(e)); } @@ -360,28 +332,8 @@ public static boolean getBooleanArg(WebScriptRequest req, String name, boolean d return defaultValue; } - - public StringBuffer getResponse() { - return response; - } - - public Status getResponseStatus() { - return responseStatus; - } - - /** - * Should create the new instances with the response in constructor, so - * this can be removed every where - * - * @param instance - */ - public void appendResponseStatusInfo(AbstractJavaWebScript instance) { - response.append(instance.getResponse()); - responseStatus.setCode(instance.getResponseStatus().getCode()); - } - protected void printFooter(String user, Logger logger, Timer timer) { - logger.info(String.format("%d %s %s", getResponseStatus().getCode(), user, timer)); + logger.info(String.format("%d %s %s", responseStatus.getCode(), user, timer)); } protected void printHeader(String user, Logger logger, WebScriptRequest req) { @@ -422,17 +374,6 @@ public static String getProjectId(WebScriptRequest req) { return null; } - public static String getProjectId(WebScriptRequest req, String siteName) { - String projectId = req.getServiceMatch().getTemplateVars().get(PROJECT_ID); - if (projectId == null || projectId.length() <= 0) { - if (siteName == null) { - siteName = NO_SITE_ID; - } - projectId = siteName + "_" + NO_PROJECT_ID; - } - return projectId; - } - public static String getRefId(WebScriptRequest req) { String refId = req.getServiceMatch().getTemplateVars().get(REF_ID); if (refId == null || refId.length() <= 0) { @@ -441,20 +382,6 @@ public static String getRefId(WebScriptRequest req) { return refId; } - public EmsScriptNode getWorkspace(WebScriptRequest req) { - String refId = getRefId(req); - String projectId = getProjectId(req); - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - String orgId = emsNodeUtil.getOrganizationFromProject(projectId); - EmsScriptNode node = EmsScriptNode.getSiteNode(orgId); - node = node.childByNamePath("/" + projectId + "/refs/" + refId); - if (node != null) { - return new EmsScriptNode(node.getNodeRef(), services); - } - - return null; - } - /** * This needs to be called with the incoming JSON request to populate the local source * variable that is used in the sendDeltas call. @@ -475,178 +402,4 @@ public String createResponseJson() { String resStr = !Utils.isNullOrEmpty(resToString) ? resToString.replaceAll(System.lineSeparator(), "") : ""; return !Utils.isNullOrEmpty(resStr) ? String.format("{\"message\":\"%s\"}", resStr) : "{}"; } - - - /** - * compareMmsVersions - *
- *

Note: Returns true if this compare fails for either incorrect versions or if there is an error with the request.
- * Returns false if the check is successful and the versions match.

- *
-     * Takes a request created when a service is called and will retrieve the mmsVersion that is sent with it.
-     *  The flag checkMmsVersions needs to be set to true for this service to work.
-     *  
1. Check if there the request comes with the parameter mmsVersion=2.#. If the global flag - * is set to check for mmsVersion it will then return either none if either invalid input or if none has been - * specified, or the value of the version the service is being called with. - *
2. If the value that is received after checking for mmsVersion in the request, is 'none' then - * it will call parseContent of the request to create a JSONObject. If that fails, an exception is thrown - * and the boolean value 'true' is returned to the calling method to signify failure of the check. Else it - * will try to grab the mmsVersion from where ever it may lie within the JSONObject. - *
3. - *
- * - * @param req WebScriptRequest - * @param response StringBuffer response - * @param status Status of the request - * @return boolean false if versions match, true if they do not match or if is an incorrect request. - * @author EDK - */ - public boolean compareMmsVersions(WebScriptRequest req, StringBuffer response, Status status) { - // Calls getBooleanArg to check if they have request for mms version - // TODO: Possibly remove this and implement as an aspect? - boolean incorrectVersion = true; - JsonObject jsonRequest = null; - char logCase = '0'; - JsonObject jsonVersion = null; - String mmsVersion = null; - - // Checks if the argument is mmsVersion and returns the value specified - // by the request - // if there is no request it will return 'none' - String paramVal = getStringArg(req, "mmsVersion", "none"); - String paramArg = paramVal; - // Checks data member requestJSON to see if it is not null and if - // paramVal is none - - // // Check if input is K or JSON - String contentType = req.getContentType() == null ? "" : req.getContentType().toLowerCase(); - - boolean jsonNotK = !contentType.contains("application/k"); - - - if (!jsonNotK && paramVal.equals("none")) { - jsonRequest = getRequestJSON(req); - - if (jsonRequest != null) { - paramVal = JsonUtil.getOptString(jsonRequest, "mmsVersion"); - } - } - - if (paramVal != null && !paramVal.equals("none") && paramVal.length() > 0) { - jsonVersion = getMMSversion(getServices()); - mmsVersion = jsonVersion.get("mmsVersion").toString(); - - log(Level.INFO, HttpServletResponse.SC_OK, "Comparing Versions...."); - if (mmsVersion.equals(paramVal)) { - // Compared versions matches - logCase = '1'; - incorrectVersion = false; - } else { - // Versions do not match - logCase = '2'; - } - } else if (Utils.isNullOrEmpty(paramVal) || paramVal.equals("none")) { - // Missing MMS Version parameter - logCase = '3'; - } else { - // Wrong MMS Version or Invalid input - logCase = '4'; - } - switch (logCase) { - case '1': - log(Level.INFO, HttpServletResponse.SC_OK, "Correct Versions"); - break; - case '2': - log(Level.WARN, HttpServletResponse.SC_CONFLICT, - "Versions do not match! Expected Version " + mmsVersion + ". Instead received " + paramVal); - break; - case '3': - log(Level.ERROR, HttpServletResponse.SC_CONFLICT, - "Missing MMS Version or invalid parameter. Received parameter:" + paramArg + " and argument:" - + mmsVersion + ". Request was: " + jsonRequest); - break; - // TODO: This should be removed but for the moment I am leaving this - // in as a contingency if anything else may break this. - case '4': - log(Level.ERROR, HttpServletResponse.SC_CONFLICT, - "Wrong MMS Version or invalid input. Expected mmsVersion=" + mmsVersion + ". Instead received " - + paramVal); - break; - } - // Returns true if it is either the wrong version or if it failed to - // compare it - // Returns false if it was successful in retrieving the mmsVersions from - // both the MMS and the request and - return incorrectVersion; - } - - /** - * getMMSversion
- * Returns a JSONObject representing the mms version being used. It's format - * will be - * - *
-     *  {
-     *     "mmsVersion":"2.2"
-     * }
-     * 
- * - * @return JSONObject mmsVersion - */ - public static JsonObject getMMSversion(ServiceRegistry services) { - JsonObject version = new JsonObject(); - version.addProperty("mmsVersion", EmsNodeUtil.getMMSversion(services)); - return version; - } - - /** - * Helper utility to get the String value of a request parameter, calls on - * getParameterNames from the WebScriptRequest object to compare the - * parameter name passed in that is desired from the header. - * - * @param req WebScriptRequest with parameter to be checked - * @param name String of the request parameter name to check - * @param defaultValue default value if there is no parameter with the given name - * @return 'empty' if the parameter is assigned no value, if it is assigned - * "parameter value" (ignoring case), or if it's default is default - * value and it is not assigned "empty" (ignoring case). - * @author dank - */ - public static String getStringArg(WebScriptRequest req, String name, String defaultValue) { - if (!Arrays.asList(req.getParameterNames()).contains(name)) { - return defaultValue; - } - return req.getParameter(name); - } - - /** - * setRequestJSON
- * This will set the AbstractJavaWebScript data member requestJSON. It will - * make the parsedContent JSONObject remain within the scope of the - * AbstractJavaWebScript. {@link} - * - * @param req WebScriptRequest - */ - private void setRequestJSON(WebScriptRequest req) { - - JsonParser parser = new JsonParser(); - try { - JsonElement parsed = parser.parse(req.getContent().getContent()); - privateRequestJSON = parsed.isJsonNull() ? new JsonObject() : - parsed.getAsJsonObject(); - } catch (Exception e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Could not retrieve JSON"); - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - } - } - - private JsonObject getRequestJSON(WebScriptRequest req) { - // Returns immediately if requestJSON has already been set before checking MMS Versions - if (privateRequestJSON == null) { - return null; - } - // Sets privateRequestJSON - setRequestJSON(req); - return privateRequestJSON; - } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java index 7d8ac5c0..f154caf4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AllFlagsGet.java @@ -5,11 +5,7 @@ public class AllFlagsGet extends FlagSet { private static final String[] flags = - new String[] { "debug", - - "checkMmsVersions", - - "skipSvgToPng"}; + new String[] { "debug"}; @Override public String[] getAllFlags() { @@ -31,11 +27,6 @@ protected boolean set( boolean val ) { if (path.equalsIgnoreCase( "all" )) { return false; } - if (path.equalsIgnoreCase("checkMmsVersions")){ - AbstractJavaWebScript.checkMmsVersions = val; - } else if (path.equalsIgnoreCase("skipSvgToPng")){ - EmsScriptNode.skipSvgToPng = val; - } return true; } @@ -49,25 +40,14 @@ protected boolean get( String path ) { if (path.equalsIgnoreCase( "all" )) { return true; } - - if (path.equalsIgnoreCase("checkMmsVersions")){ - return AbstractJavaWebScript.checkMmsVersions; - } else if (path.equalsIgnoreCase( "skipSvgToPng" )) { - return EmsScriptNode.skipSvgToPng; - } return false; } @Override protected boolean clear() { String path = getPath(); - if (path.equalsIgnoreCase ("debug")) { return false; - } else if (path.equalsIgnoreCase("checkMmsVersions")){ - return false; - } else if (path.equalsIgnoreCase( "skipSvgToPng" )) { - return false; } return false; } @@ -87,11 +67,6 @@ protected String flagName() { } if (path.equalsIgnoreCase ("debug")) { return "debug"; - - } else if (path.equalsIgnoreCase("checkMmsVersions")){ - return "checkMmsVersions"; - } else if (path.equalsIgnoreCase( "skipSvgToPng")) { - return "skipSvgToPg"; } return null; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java index bc0b3371..46f72223 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactPost.java @@ -260,7 +260,7 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri } if (artifact == null) { - log(HttpServletResponse.SC_BAD_REQUEST, "Was not able to create the artifact!\n"); + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Was not able to create the artifact!\n"); model.put(Sjm.RES, createResponseJson()); } else { String url = artifact.getUrl(); @@ -269,11 +269,11 @@ boolean handleArtifactPost(final WebScriptRequest req, final Status status, Stri } } } else { - log(HttpServletResponse.SC_BAD_REQUEST, "artifactId not supplied or content is empty!"); + log(Level.INFO, HttpServletResponse.SC_BAD_REQUEST, "artifactId not supplied or content is empty!"); model.put(Sjm.RES, createResponseJson()); } } else { - log(HttpServletResponse.SC_BAD_REQUEST, "Invalid request, no sitename specified or no content provided!"); + log(Level.INFO, HttpServletResponse.SC_BAD_REQUEST, "Invalid request, no sitename specified or no content provided!"); model.put(Sjm.RES, createResponseJson()); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java index 9ff2a2f1..438e08ac 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DeclarativeJavaWebScript.java @@ -56,7 +56,6 @@ public class DeclarativeJavaWebScript extends AbstractWebScript { // Logger private static final Log logger = LogFactory.getLog(DeclarativeJavaWebScript.class); - static boolean cacheSnapshotsFlag = false; protected boolean editable = false; public static final String REF_ID = "refId"; @@ -70,9 +69,6 @@ public class DeclarativeJavaWebScript extends AbstractWebScript { public static final String NO_PROJECT_ID = "no_project"; public static final String NO_SITE_ID = "no_site"; - private static final String HEADER_CONTENT_RANGE = "Content-Range"; - private static final String HEADER_CONTENT_LENGTH = "Content-Length"; - /* (non-Javadoc) * @see org.alfresco.web.scripts.WebScript#execute(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.WebScriptResponse) */ @@ -91,7 +87,6 @@ public class DeclarativeJavaWebScript extends AbstractWebScript { // construct model for script / template Status status = new Status(); Cache cache = new Cache(getDescription().getRequiredCache()); - setCacheHeaders(req, cache); // add in custom headers for nginx caching Map model; @@ -121,49 +116,29 @@ public class DeclarativeJavaWebScript extends AbstractWebScript { model.put("cache", cache); try { - // create model for template rendering - Map templateModel = createTemplateParameters(req, res, model); - // is a redirect to a status specific template required? - if (status.getRedirect()) { - sendStatus(req, res, status, cache, format, templateModel); - } else { - // render output - int statusCode = status.getCode(); - if (statusCode != HttpServletResponse.SC_OK && !req.forceSuccessStatus()) { - if (logger.isDebugEnabled()) { - logger.debug("Force success status header in response: " + req.forceSuccessStatus()); - logger.debug("Setting status " + statusCode); - } - res.setStatus(statusCode); - } - - // apply location - String location = status.getLocation(); - if (location != null && location.length() > 0) { - if (logger.isDebugEnabled()) - logger.debug("Setting location to " + location); - res.setHeader(WebScriptResponse.HEADER_LOCATION, location); - } - - // apply cache - res.setCache(cache); - - // render response according to requested format - if (templateModel.containsKey(Sjm.RES) && templateModel.get(Sjm.RES) != null) { - res.setContentType("application/json"); - res.setContentEncoding("UTF-8"); - if (templateModel.get(Sjm.RES) instanceof JsonObject) { - JsonObject json = (JsonObject) templateModel.get(Sjm.RES); - Map jsonMap = new Gson().fromJson(json, new TypeToken>(){}.getType()); - JsonContentReader reader = new JsonContentReader(jsonMap); - - // get the content and stream directly to the response output stream - // assuming the repository is capable of streaming in chunks, this should allow large files - // to be streamed directly to the browser response stream. - reader.getStreamContent(res.getOutputStream()); - } else { - res.getWriter().write(templateModel.get(Sjm.RES).toString()); - } + res.setStatus(status.getCode()); + String location = status.getLocation(); + if (location != null && location.length() > 0) { + res.setHeader(WebScriptResponse.HEADER_LOCATION, location); + } + // apply cache + res.setCache(cache); + + // render response according to requested format + if (model.containsKey(Sjm.RES) && model.get(Sjm.RES) != null) { + res.setContentType("application/json"); + res.setContentEncoding("UTF-8"); + if (model.get(Sjm.RES) instanceof JsonObject) { + JsonObject json = (JsonObject) model.get(Sjm.RES); + Map jsonMap = new Gson().fromJson(json, new TypeToken>(){}.getType()); + JsonContentReader reader = new JsonContentReader(jsonMap); + + // get the content and stream directly to the response output stream + // assuming the repository is capable of streaming in chunks, this should allow large files + // to be streamed directly to the browser response stream. + reader.getStreamContent(res.getOutputStream()); + } else { + res.getWriter().write(model.get(Sjm.RES).toString()); } } } finally { @@ -177,73 +152,6 @@ public class DeclarativeJavaWebScript extends AbstractWebScript { } } - /** - * Set the cache headers for caching server based on the request. This is single place - * that we need to modify to update cache-control headers across all webscripts. - * - * @param req - * @param cache - */ - private boolean setCacheHeaders(WebScriptRequest req, Cache cache) { - String[] names = req.getParameterNames(); - boolean cacheUpdated = false; - // check if timestamp - for (String name : names) { - if (name.equals("timestamp")) { - cacheUpdated = updateCache(cache); - break; - } - } - // check if configuration snapshots and products - if (!cacheUpdated) { - if (cacheSnapshotsFlag) { - String url = req.getURL(); - if (url.contains("configurations")) { - if (url.contains("snapshots") || url.contains(Sjm.PRODUCTS)) { - cacheUpdated = updateCache(cache); - } - } - } - } - - return cacheUpdated; - } - - private boolean updateCache(Cache cache) { - if (!cache.getIsPublic()) { - cache.setIsPublic(true); - cache.setMaxAge(31557000L); - // following are true by default, so need to set them to false - cache.setNeverCache(false); - cache.setMustRevalidate(false); - } - return true; - } - - /** - * Execute custom Java logic - * - * @param req Web Script request - * @param status Web Script status - * @return custom service model - * @deprecated - */ - @Deprecated protected Map executeImpl(WebScriptRequest req, WebScriptStatus status) { - return null; - } - - /** - * Execute custom Java logic - * - * @param req Web Script request - * @param status Web Script status - * @return custom service model - * @deprecated - */ - @Deprecated protected Map executeImpl(WebScriptRequest req, Status status) { - return executeImpl(req, new WebScriptStatus(status)); - } - /** * Execute custom Java logic * @@ -253,8 +161,7 @@ private boolean updateCache(Cache cache) { * @return custom service model */ protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { - // NOTE: Redirect to those web scripts implemented before cache support and v2.9 - return executeImpl(req, status); + return null; } /** diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DocumentsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DocumentsGet.java index 5d272da5..1a615829 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DocumentsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/DocumentsGet.java @@ -51,14 +51,6 @@ public DocumentsGet(Repository repository, ServiceRegistry services) { Map model = new HashMap<>(); - // Checks mms versions - if (checkMmsVersions) { - if (compareMmsVersions(req, getResponse(), getResponseStatus())) { - model.put(Sjm.RES, createResponseJson()); - return model; - } - } - JsonObject jsonObject = new JsonObject(); try { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java index 348557f4..5894ac9e 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/HtmlConverterPost.java @@ -62,7 +62,6 @@ public HtmlConverterPost(Repository repositoryHelper, ServiceRegistry registry) Map model = new HashMap<>(); - HtmlConverterPost instance = new HtmlConverterPost(repository, services); JsonObject postJson = null; JsonObject result = new JsonObject(); try { @@ -99,7 +98,6 @@ public HtmlConverterPost(Repository repositoryHelper, ServiceRegistry registry) logger.error(String.format("%s", LogUtil.getStackTrace(e))); } - appendResponseStatusInfo(instance); status.setCode(responseStatus.getCode()); if (postJson == null) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java index c1ff52b1..abb27448 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/MmsVersion.java @@ -3,6 +3,7 @@ import java.util.HashMap; import java.util.Map; +import gov.nasa.jpl.view_repo.util.EmsNodeUtil; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; @@ -47,13 +48,11 @@ protected Map executeImplImpl(WebScriptRequest req, Status statu Map model = new HashMap<>(); - JsonObject mmsVersion; - if (logger.isDebugEnabled()) { logger.debug("Checking MMS Versions"); } - - mmsVersion = getMMSversion(getServices()); + JsonObject mmsVersion = new JsonObject(); + mmsVersion.addProperty("mmsVersion", EmsNodeUtil.getMMSversion(services)); if (prettyPrint) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); model.put(Sjm.RES, gson.toJson(mmsVersion)); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgGet.java index bba3f17f..b50a6b93 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgGet.java @@ -79,10 +79,7 @@ public OrgGet(Repository repositoryHelper, ServiceRegistry registry) { Timer timer = new Timer(); Map model = new HashMap<>(); - if (checkMmsVersions && compareMmsVersions(req, getResponse(), getResponseStatus())) { - model.put(Sjm.RES, createResponseJson()); - return model; - } + JsonObject json = null; String[] accepts = req.getHeaderValues("Accept"); String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java index 6cc41674..6527d6c0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java @@ -133,7 +133,6 @@ public OrgPost(Repository repositoryHelper, ServiceRegistry registry) { } } else { - EmsScriptNode site = new EmsScriptNode(siteInfo.getNodeRef(), services, response); JsonObject res = CommitUtil.sendOrganizationDelta(orgId, orgName, projJson); if (res != null && !JsonUtil.getOptString(res, Sjm.SYSMLID).isEmpty()) { log(Level.INFO, HttpServletResponse.SC_OK, diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java index 1b7925ac..4e74aece 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java @@ -71,8 +71,6 @@ public ProjectPost(Repository repositoryHelper, ServiceRegistry registry) { private static final String REF_PATH = "refs"; private static final String REF_PATH_SEARCH = "/" + REF_PATH; - private static final String JSON_SPECIALIZATION = "specialization"; - private static final String JSON_PROJECT_VERSION = "projectVersion"; /** * Webscript entry point @@ -212,30 +210,30 @@ public int updateOrCreateProject(JsonObject jsonObject, String projectId, String EmsScriptNode projectContainerNode = site.childByNamePath(projectId); if (projectContainerNode == null) { - projectContainerNode = site.createFolder(projectId, null, null); - projectContainerNode.createOrUpdateProperty(Acm.CM_TITLE, JsonUtil.getOptString(jsonObject, Sjm.NAME)); + projectContainerNode = site.createFolder(projectId, null); + projectContainerNode.setProperty(Acm.CM_TITLE, JsonUtil.getOptString(jsonObject, Sjm.NAME)); log(Level.INFO, HttpServletResponse.SC_OK, "Project folder created.\n"); } EmsScriptNode documentLibrary = site.childByNamePath("documentLibrary"); if (documentLibrary == null) { - documentLibrary = site.createFolder("documentLibrary", null, null); + documentLibrary = site.createFolder("documentLibrary", null); } EmsScriptNode documentProjectContainer = documentLibrary.childByNamePath(projectId); if (documentProjectContainer == null) { - documentProjectContainer = documentLibrary.createFolder(projectId, null, null); - documentProjectContainer.createOrUpdateProperty(Acm.CM_TITLE, JsonUtil.getOptString(jsonObject, Sjm.NAME)); + documentProjectContainer = documentLibrary.createFolder(projectId, null); + documentProjectContainer.setProperty(Acm.CM_TITLE, JsonUtil.getOptString(jsonObject, Sjm.NAME)); } EmsScriptNode refContainerNode = projectContainerNode.childByNamePath(REF_PATH_SEARCH); if (refContainerNode == null) { - refContainerNode = projectContainerNode.createFolder("refs", null, null); + refContainerNode = projectContainerNode.createFolder("refs", null); } EmsScriptNode branch = refContainerNode.childByNamePath(NO_WORKSPACE_ID); if (branch == null) { - branch = refContainerNode.createFolder(NO_WORKSPACE_ID, null, null); + branch = refContainerNode.createFolder(NO_WORKSPACE_ID, null); EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, NO_WORKSPACE_ID); JsonObject masterWs = new JsonObject(); masterWs.addProperty("id", NO_WORKSPACE_ID); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/SiteGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/SiteGet.java index c8a27832..d90cc369 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/SiteGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/SiteGet.java @@ -87,12 +87,7 @@ public SiteGet(Repository repositoryHelper, ServiceRegistry registry) { Timer timer = new Timer(); Map model = new HashMap<>(); - if (checkMmsVersions) { - if (compareMmsVersions(req, getResponse(), getResponseStatus())) { - model.put(Sjm.RES, createResponseJson()); - return model; - } - } + JsonObject json = null; try { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspaceDelete.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspaceDelete.java index e3a5273d..f2e9f2c4 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspaceDelete.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspaceDelete.java @@ -68,14 +68,7 @@ public WorkspaceDelete(Repository repositoryHelper, ServiceRegistry service) { } else { EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, wsId); emsNodeUtil.deleteRef(wsId); - EmsScriptNode target = getWorkspace(req); - if (target != null) { - object = printObject(target); - target.delete(); //this didn't actually delete the alfresco folder just added deleted aspect - responseStatus.setCode(HttpServletResponse.SC_OK); - } else { - log(Level.WARN, HttpServletResponse.SC_NOT_FOUND, "Could not find workspace %s", wsId); - } + object = new JsonObject(); } } } catch (JsonParseException e) { @@ -108,9 +101,5 @@ public WorkspaceDelete(Repository repositoryHelper, ServiceRegistry service) { return model; } - - private JsonObject printObject(EmsScriptNode workspace) { - return new JsonObject(); - } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index 8e213ad7..fd091313 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -177,7 +177,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String String date = TimeUtils.toTimestamp(new Date().getTime()); if (orgNode == null) { - log(Level.WARN, "Site Not Found", HttpServletResponse.SC_NOT_FOUND); + log(Level.WARN, HttpServletResponse.SC_NOT_FOUND, "Site Not Found"); status.setCode(HttpServletResponse.SC_NOT_FOUND); return null; } @@ -253,7 +253,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String return null; } else { EmsScriptNode refContainerNode = orgNode.childByNamePath("/" + projectId + "/refs"); - EmsScriptNode dstWs = refContainerNode.createFolder(newWorkspaceId, null, null); + EmsScriptNode dstWs = refContainerNode.createFolder(newWorkspaceId, null); if (dstWs != null && srcWs != null) { // keep history of the branch @@ -274,7 +274,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String } else { // Workspace was found, so update it: if (existingRef.getId() != null) { - log(Level.INFO, "Workspace is modified", HttpServletResponse.SC_OK); + log(Level.INFO, HttpServletResponse.SC_OK, "Workspace is modified"); finalWorkspace = existingRef; } else { log(Level.WARN, HttpServletResponse.SC_NOT_FOUND, "Workspace not found."); From bd067089f29eaa14a4eaec9afb775fbbbd97d849 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 23 Aug 2018 10:50:47 -0700 Subject: [PATCH 087/126] Change error processing --- .../webscripts/AbstractJavaWebScript.java | 12 ++++----- .../view_repo/webscripts/ArtifactsGet.java | 4 +-- .../jpl/view_repo/webscripts/ModelGet.java | 27 ++++++++----------- .../jpl/view_repo/webscripts/ModelsGet.java | 5 ++-- .../src/main/resources/mapping_template.json | 10 +++++++ 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index 1a50f91a..ff41c258 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -32,6 +32,7 @@ import gov.nasa.jpl.view_repo.util.Sjm; import java.util.Arrays; import java.util.Map; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -254,18 +255,17 @@ protected String addLevelInfoToMsg(Level level, String msg) { } - protected JsonArray parseErrors(JsonObject result) { + protected JsonArray parseErrors(Map> errors) { JsonArray errorMessages = new JsonArray(); for (Map.Entry level : Sjm.ERROR_LEVELS.entrySet()) { - JsonArray errors = JsonUtil.getOptArray(result, level.getKey()); - if (errors.size() > 0) { - for (int i = 0; i < errors.size(); i++) { + if (errors.get(level.getKey()) != null && !errors.get(level.getKey()).isEmpty()) { + for (String sysmlid : errors.get(level.getKey())) { JsonObject errorPayload = new JsonObject(); errorPayload.addProperty("code", level.getValue()); - errorPayload.add(Sjm.SYSMLID, errors.get(i)); + errorPayload.addProperty(Sjm.SYSMLID, sysmlid); errorPayload.addProperty("message", - String.format("Element %s was not found", errors.get(i).getAsString())); + String.format("Element %s was not found", sysmlid)); errorMessages.add(errorPayload); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java index 9f94929d..66c49970 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java @@ -91,7 +91,7 @@ public ArtifactsGet(Repository repositoryHelper, ServiceRegistry registry) { Map model = new HashMap<>(); JsonArray elementsJson = new JsonArray(); - JsonArray errors = new JsonArray(); + Map> errors = new HashMap<>(); JsonObject result = new JsonObject(); try { @@ -110,7 +110,7 @@ public ArtifactsGet(Repository repositoryHelper, ServiceRegistry registry) { top.add(Sjm.ARTIFACTS, elements); - JsonArray errorMessages = parseErrors(result); + JsonArray errorMessages = parseErrors(errors); if (errorMessages.size() > 0) { top.add("messages", errorMessages); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 0c116b92..b3bd8876 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -122,6 +122,7 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; Map model = new HashMap<>(); + Map> errors = new HashMap<>(); JsonArray elementsJson = new JsonArray(); JsonObject result = new JsonObject(); @@ -154,17 +155,18 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { deletedSet.add(deleted.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); } elementsToFind.removeAll(deletedSet); - JsonUtil.addStringSet(result, Sjm.DELETED, deletedSet); + errors.put(Sjm.DELETED, deletedSet); top.add(Sjm.DELETED, deleted); log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted elements found"); } } if (!elementsToFind.isEmpty()) { JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + errors.put(Sjm.FAILED, elementsToFind); log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); } - JsonArray errorMessages = parseErrors(result); + JsonArray errorMessages = parseErrors(errors); if (errorMessages.size() > 0) { top.add("messages", errorMessages); @@ -239,7 +241,9 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St try { String currentId = elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString(); elementsToFind.add(currentId); - } catch (Exception e) {} + } catch (Exception e) { + // Intentionally empty + } } JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); @@ -257,9 +261,9 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St } if (!elementsToFind.isEmpty()) { - JsonArray deletedElementsCache = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); + JsonArray deletedElementsJson = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); if (timestamp != null) { - for (JsonElement check : deletedElementsCache) { + for (JsonElement check : deletedElementsJson) { try { Date created = EmsNodeUtil.df.parse(JsonUtil.getOptString((JsonObject) check, Sjm.CREATED)); Date commitDate = EmsNodeUtil.df.parse(timestamp); @@ -273,7 +277,7 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St } } } else { - this.deletedElementsCache = deletedElementsCache; + this.deletedElementsCache = deletedElementsJson; } } @@ -296,16 +300,7 @@ Long getDepthFromRequest(WebScriptRequest req) { depth = parseDepth(depthParam); } - // recurse default is false - boolean recurse = getBooleanArg(req, "recurse", false); - // for backwards compatiblity convert recurse to infinite depth (this - // overrides - // any depth setting) - if (recurse) { - depth = 100000L; - } - - return depth; + return getBooleanArg(req, "recurse", false) ? 100000L : depth; } Long parseDepth(String depthParam) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java index 66832e9d..57cb82c6 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java @@ -94,6 +94,7 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; Map model = new HashMap<>(); + Map> errors = new HashMap<>(); JsonArray elementsJson = new JsonArray(); JsonObject result = new JsonObject(); @@ -125,11 +126,11 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { } if (!elementsToFind.isEmpty()) { - JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); + errors.put(Sjm.FAILED, elementsToFind); log(Level.ERROR, HttpServletResponse.SC_OK, "Some elements not found."); } - JsonArray errorMessages = parseErrors(result); + JsonArray errorMessages = parseErrors(errors); if (errorMessages.size() > 0) { top.add("messages", errorMessages); diff --git a/mms-ent/repo-amp/src/main/resources/mapping_template.json b/mms-ent/repo-amp/src/main/resources/mapping_template.json index 45304ef1..f86dc0d9 100644 --- a/mms-ent/repo-amp/src/main/resources/mapping_template.json +++ b/mms-ent/repo-amp/src/main/resources/mapping_template.json @@ -234,6 +234,16 @@ "type": "keyword" } } + }, + "ref": { + "properties": { + "id": { + "type": "keyword" + }, + "name": { + "type": "keyword" + } + } } } } From 506a6768ee53c195bbe019a5e9f299b9e3435e02 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Thu, 23 Aug 2018 11:29:57 -0700 Subject: [PATCH 088/126] fix lgtm alert --- .../java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java index d587c489..5a41ddaa 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsScriptNode.java @@ -300,11 +300,7 @@ public boolean checkPermissions(String permissions, StringBuffer response, Statu } return b; } - - @Override public int hashCode() { - return parent.hashCode(); - } - + public static ServiceRegistry getServices() { return services; } From 9b8c64201c7be377974686b809bb834ba3df63d6 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Thu, 23 Aug 2018 14:15:29 -0700 Subject: [PATCH 089/126] remove one more log --- .../view_repo/webscripts/AbstractJavaWebScript.java | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index 49073aef..09a52ec0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -169,16 +169,6 @@ protected void log(Level level, int code, String msg, Exception e) { } } - // If no need for string formatting (calls with no string concatenation) - protected void log(Level level, int code, Exception e) { - String levelMessage = addLevelInfoToMsg(level, LogUtil.getStackTrace(e)); - updateResponse(code, levelMessage); - if (level.toInt() >= logger.getLevel().toInt()) { - // print to response stream if >= existing log level - log(level, levelMessage); - } - } - protected void updateResponse(int code, String msg) { response.append(msg); responseStatus.setCode(code); From b22171551eda3d9323ef8f19c91e1f9c87647452 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 23 Aug 2018 15:02:55 -0700 Subject: [PATCH 090/126] Combining some methods --- .../nasa/jpl/view_repo/db/ElasticHelper.java | 27 ++++++++++--------- .../view_repo/db/ElasticsearchInterface.java | 4 +-- .../nasa/jpl/view_repo/util/CommitUtil.java | 6 ++--- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 10 +++---- .../jpl/view_repo/util/tasks/BranchTask.java | 2 +- .../jpl/view_repo/webscripts/ProjectPost.java | 3 ++- .../view_repo/webscripts/WorkspacesPost.java | 5 ++-- 7 files changed, 29 insertions(+), 28 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java index 1e63a7b9..c753ad53 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java @@ -49,8 +49,9 @@ public class ElasticHelper implements ElasticsearchInterface { public static final String ELEMENT = "element"; public static final String COMMIT = "commit"; - private static final String PROFILE = "profile"; - private static final String ARTIFACT = "artifact"; + public static final String PROFILE = "profile"; + public static final String ARTIFACT = "artifact"; + public static final String REF = "ref"; private static final String COMMIT_QUERY = "{\"query\":{\"bool\":{\"filter\":[{\"term\":{\"%1$s\":\"%2$s\"}},{\"term\":{\"%3$s\":\"%4$s\"}}]}}}"; @@ -433,7 +434,6 @@ public ElasticResult updateElement(JsonObject j, String index, String eType) thr if (j.has(Sjm.ELASTICID)) { JsonObject updateWrapper = new JsonObject(); String elasticId = j.get(Sjm.ELASTICID).getAsString(); - j.remove(Sjm.ELASTICID); updateWrapper.add("doc", j); result.elasticId = client.execute(new Update.Builder(updateWrapper.toString()).id(elasticId) .index(index.toLowerCase().replaceAll("\\s+", "")).type(eType).build()).getId(); @@ -461,29 +461,30 @@ public boolean refreshIndex() throws IOException { return result.isSucceeded(); } - public boolean updateElement(String id, JsonObject payload, String index) throws IOException { - JsonObject update = new JsonObject(); - update.add("doc", payload); - update.addProperty("_source", true); - JestResult updated = client.execute( - new Update.Builder(update.toString()).id(id).index(index.toLowerCase().replaceAll("\\s+", "")).type(ELEMENT) - .build()); - return updated.isSucceeded(); + public JsonObject updateElement(String id, JsonObject payload, String index) throws IOException { + return updateById(id, payload, index, ELEMENT); } public JsonObject updateProfile(String id, JsonObject payload, String index) throws IOException { + return updateById(id, payload, index, PROFILE); + } + + public JsonObject updateById(String id, JsonObject payload, String index, String type) throws IOException { JsonObject upsert = new JsonObject(); upsert.add("doc", payload); upsert.addProperty("doc_as_upsert", true); upsert.addProperty("_source", true); JestResult res = client.execute( - new Update.Builder(upsert.toString()).id(id).index(index.toLowerCase().replaceAll("\\s+", "")).type(PROFILE) + new Update.Builder(upsert.toString()).id(id).index(index.toLowerCase().replaceAll("\\s+", "")).type(type) .build()); - if (res.isSucceeded()) + if (res.isSucceeded()) { return res.getJsonObject().get("get").getAsJsonObject().get("_source").getAsJsonObject(); + } return new JsonObject(); } + + /** * Index multiple JSON documents by type using the BulkAPI (1) * diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java index de27c9e2..feb57cfb 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java @@ -30,9 +30,9 @@ public interface ElasticsearchInterface { ElasticResult indexElement(JsonObject j, String index, String eType) throws IOException; - boolean refreshIndex() throws IOException; + JsonObject updateElement(String id, JsonObject payload, String index) throws IOException; - boolean updateElement(String id, JsonObject payload, String index) throws IOException; + boolean refreshIndex() throws IOException; boolean bulkIndexElements(JsonArray bulkElements, String operation, boolean refresh, String index, String type) throws IOException; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index 8af570b4..1c65e850 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -681,10 +681,8 @@ public static JsonObject sendOrganizationDelta(String orgId, String orgName, Jso } else { pgh.updateOrganization(orgId, orgName); orgJson.addProperty(Sjm.ELASTICID, orgId); - if (eh.updateElement(orgId, orgJson, defaultIndex)) { - if (eh.refreshIndex()) { - return eh.getElementByElasticId(orgId, defaultIndex); - } + if (eh.updateElement(orgId, orgJson, defaultIndex).size() > 0 && eh.refreshIndex()) { + return eh.getElementByElasticId(orgId, defaultIndex); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 60660f9d..83b642f5 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -338,7 +338,7 @@ public JsonObject getRefJson(String refId) { Map refInfo = pgh.getRefElastic(refId); if (refInfo != null) { try { - jObj = eh.getElementByElasticId(refInfo.get("elasticId"), projectId); + jObj = eh.getByElasticId(refInfo.get("elasticId"), projectId, ElasticHelper.REF); jObj.addProperty("parentRefId", (refInfo.get("parent").equals("")) ? "noParent" : refInfo.get("parent")); jObj.addProperty("type", (refInfo.get("isTag").equals("true")) ? "tag" : "branch"); @@ -1581,9 +1581,9 @@ public void insertProjectIndex(String projectId) { } } - public String insertSingleElastic(JsonObject o) { + public String insertSingleElastic(JsonObject o, String type) { try { - ElasticResult r = eh.indexElement(o, projectId, ElasticHelper.ELEMENT); + ElasticResult r = eh.indexElement(o, projectId, type); return r.elasticId; } catch (IOException e) { logger.debug(String.format("%s", LogUtil.getStackTrace(e))); @@ -1591,9 +1591,9 @@ public String insertSingleElastic(JsonObject o) { return null; } - public String updateSingleElastic(JsonObject o) { + public String updateSingleElastic(JsonObject o, String type) { try { - ElasticResult r = eh.updateElement(o, projectId, ElasticHelper.ELEMENT); + ElasticResult r = eh.updateElement(o, projectId, type); return r.elasticId; } catch (IOException e) { logger.debug(String.format("%s", LogUtil.getStackTrace(e))); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java index 41011b8e..d1899f1b 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java @@ -201,7 +201,7 @@ private JsonObject createBranch() { } try { - eh.updateElement(elasticId, created, projectId); + eh.updateById(elasticId, created, projectId, ElasticHelper.REF); } catch (Exception e) { //Do nothing } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java index 1b7925ac..eaa56643 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java @@ -27,6 +27,7 @@ package gov.nasa.jpl.view_repo.webscripts; import gov.nasa.jpl.mbee.util.Timer; +import gov.nasa.jpl.view_repo.db.ElasticHelper; import gov.nasa.jpl.view_repo.util.Acm; import gov.nasa.jpl.view_repo.util.CommitUtil; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; @@ -242,7 +243,7 @@ public int updateOrCreateProject(JsonObject jsonObject, String projectId, String masterWs.addProperty("name", NO_WORKSPACE_ID); // :TODO going to have to check that index doesn't exist if ES doesn't already do this emsNodeUtil.insertProjectIndex(projectId); - String elasticId = emsNodeUtil.insertSingleElastic(masterWs); + String elasticId = emsNodeUtil.insertSingleElastic(masterWs, ElasticHelper.REF); emsNodeUtil.insertRef(NO_WORKSPACE_ID, NO_WORKSPACE_ID, elasticId, false); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index d601374f..a52fead9 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -29,6 +29,7 @@ package gov.nasa.jpl.view_repo.webscripts; +import gov.nasa.jpl.view_repo.db.ElasticHelper; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -245,7 +246,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String wsJson.addProperty(Sjm.CREATOR, user); wsJson.addProperty(Sjm.MODIFIED, date); wsJson.addProperty(Sjm.MODIFIER, user); - elasticId = emsNodeUtil.insertSingleElastic(wsJson); + elasticId = emsNodeUtil.insertSingleElastic(wsJson, ElasticHelper.REF); if (!NO_WORKSPACE_ID.equals(sourceWorkspaceId) && srcWs == null) { log(Level.WARN, HttpServletResponse.SC_NOT_FOUND, "Source workspace not found."); @@ -287,7 +288,7 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String wsJson.addProperty(Sjm.MODIFIED, date); wsJson.addProperty(Sjm.MODIFIER, user); wsJson.addProperty(Sjm.ELASTICID, existingWsJson.get(Sjm.ELASTICID).getAsString()); - elasticId = emsNodeUtil.updateSingleElastic(wsJson); + elasticId = emsNodeUtil.updateSingleElastic(wsJson, ElasticHelper.REF); emsNodeUtil.updateRef(newWorkspaceId, workspaceName, elasticId, isTag); } From 422cc18ec8d53a2718c83ef260fae78a817d9c3f Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 23 Aug 2018 17:34:06 -0700 Subject: [PATCH 091/126] Use single update method --- .../nasa/jpl/view_repo/db/ElasticHelper.java | 36 -------------- .../nasa/jpl/view_repo/util/CommitUtil.java | 5 +- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 6 ++- .../jpl/view_repo/webscripts/ModelGet.java | 1 - .../jpl/view_repo/webscripts/OrgPost.java | 1 - .../view_repo/webscripts/WorkspacesPost.java | 10 ++++ .../src/main/resources/mapping_template.json | 47 +++++++++++-------- 7 files changed, 44 insertions(+), 62 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java index c753ad53..881c0149 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java @@ -412,42 +412,6 @@ public ElasticResult indexElement(JsonObject j, String index, String eType) thro return result; } - /** - * Update single JSON document by type (1) - * - * @param j JSON document to index (2) - * @return ElasticResult result - */ - public ElasticResult updateElement(JsonObject j, String index, String eType) throws IOException { - // :TODO error handling - ElasticResult result = new ElasticResult(); - - if (logger.isDebugEnabled()) { - logger.debug(String.format("indexElement: %s", j)); - } - - if (j.has(Sjm.SYSMLID)) { - result.sysmlid = j.get(Sjm.SYSMLID).getAsString(); - } - - - if (j.has(Sjm.ELASTICID)) { - JsonObject updateWrapper = new JsonObject(); - String elasticId = j.get(Sjm.ELASTICID).getAsString(); - updateWrapper.add("doc", j); - result.elasticId = client.execute(new Update.Builder(updateWrapper.toString()).id(elasticId) - .index(index.toLowerCase().replaceAll("\\s+", "")).type(eType).build()).getId(); - } - - if (result.elasticId == null) { - throw new IOException("Unable to update node in elasticsearch"); - } - - result.current = j; - - return result; - } - /** * refresh the index (1) * diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index 1c65e850..b95bcfc0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -667,7 +667,6 @@ public static JsonObject sendOrganizationDelta(String orgId, String orgName, Jso PostgresHelper pgh = new PostgresHelper(); String defaultIndex = EmsConfig.get("elastic.index.element"); - ElasticResult result = null; try { ElasticHelper eh = new ElasticHelper(); @@ -676,12 +675,12 @@ public static JsonObject sendOrganizationDelta(String orgId, String orgName, Jso pgh.createOrganization(orgId, orgName); eh.createIndex(defaultIndex); orgJson.addProperty(Sjm.ELASTICID, orgId); - result = eh.indexElement(orgJson, defaultIndex, ElasticHelper.ELEMENT); + ElasticResult result = eh.indexElement(orgJson, defaultIndex, ElasticHelper.ELEMENT); return result.current; } else { pgh.updateOrganization(orgId, orgName); orgJson.addProperty(Sjm.ELASTICID, orgId); - if (eh.updateElement(orgId, orgJson, defaultIndex).size() > 0 && eh.refreshIndex()) { + if (eh.updateById(orgId, orgJson, defaultIndex, ElasticHelper.ELEMENT).size() > 0 && eh.refreshIndex()) { return eh.getElementByElasticId(orgId, defaultIndex); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 83b642f5..c1b5c157 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -1593,8 +1593,10 @@ public String insertSingleElastic(JsonObject o, String type) { public String updateSingleElastic(JsonObject o, String type) { try { - ElasticResult r = eh.updateElement(o, projectId, type); - return r.elasticId; + if (o.has(Sjm.ELASTICID)) { + JsonObject r = eh.updateById(o.get(Sjm.ELASTICID).getAsString(), o, projectId, type); + return r.has(Sjm.ELASTICID) ? r.get(Sjm.ELASTICID).getAsString() : null; + } } catch (IOException e) { logger.debug(String.format("%s", LogUtil.getStackTrace(e))); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index b3bd8876..873abd56 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -161,7 +161,6 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { } } if (!elementsToFind.isEmpty()) { - JsonUtil.addStringSet(result, Sjm.FAILED, elementsToFind); errors.put(Sjm.FAILED, elementsToFind); log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java index 6cc41674..6527d6c0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/OrgPost.java @@ -133,7 +133,6 @@ public OrgPost(Repository repositoryHelper, ServiceRegistry registry) { } } else { - EmsScriptNode site = new EmsScriptNode(siteInfo.getNodeRef(), services, response); JsonObject res = CommitUtil.sendOrganizationDelta(orgId, orgName, projJson); if (res != null && !JsonUtil.getOptString(res, Sjm.SYSMLID).isEmpty()) { log(Level.INFO, HttpServletResponse.SC_OK, diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java index a52fead9..33ca9902 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/WorkspacesPost.java @@ -285,6 +285,16 @@ public JsonObject createWorkSpace(String projectId, String sourceWorkId, String JsonObject existingWsJson = emsNodeUtil.getRefJson(newWorkspaceId); + if (wsJson.get(Sjm.COMMITID) != null) { + wsJson.remove(Sjm.COMMITID); + } + if (wsJson.get("parentRefId") != null) { + wsJson.remove("parentRefId"); + } + if (wsJson.get("parentCommitId") != null) { + wsJson.remove("parentCommitId"); + } + wsJson.addProperty(Sjm.MODIFIED, date); wsJson.addProperty(Sjm.MODIFIER, user); wsJson.addProperty(Sjm.ELASTICID, existingWsJson.get(Sjm.ELASTICID).getAsString()); diff --git a/mms-ent/repo-amp/src/main/resources/mapping_template.json b/mms-ent/repo-amp/src/main/resources/mapping_template.json index f86dc0d9..64e1e27a 100644 --- a/mms-ent/repo-amp/src/main/resources/mapping_template.json +++ b/mms-ent/repo-amp/src/main/resources/mapping_template.json @@ -1,11 +1,11 @@ { - "template" : "*", - "settings" : { - "index" : { - "number_of_shards" : 3 + "template": "*", + "settings": { + "index": { + "number_of_shards": 3 } }, - "mappings" : { + "mappings": { "artifact": { "properties": { "id": { @@ -40,7 +40,7 @@ "type": "date", "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ" }, - "_elasticId":{ + "_elasticId": { "type": "keyword" } } @@ -48,8 +48,8 @@ "commit": { "properties": { "added": { - "properties" : { - "id":{ + "properties": { + "id": { "type": "keyword" }, "_elasticId": { @@ -64,11 +64,11 @@ } }, "updated": { - "properties" : { - "id":{ + "properties": { + "id": { "type": "keyword" }, - "_elasticId":{ + "_elasticId": { "type": "keyword" }, "previousElasticId": { @@ -80,11 +80,11 @@ } }, "deleted": { - "properties" : { - "id":{ + "properties": { + "id": { "type": "keyword" }, - "previousElasticId":{ + "previousElasticId": { "type": "keyword" }, "type": { @@ -223,7 +223,7 @@ "type": "date", "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ" }, - "_elasticId":{ + "_elasticId": { "type": "keyword" } } @@ -236,11 +236,20 @@ } }, "ref": { + "dynamic_templates": [ + { + "id_as_keywords": { + "match_mapping_type": "string", + "match_pattern": "regex", + "match": ".*(Id|Ids)", + "mapping": { + "type": "keyword" + } + } + } + ], "properties": { - "id": { - "type": "keyword" - }, - "name": { + "status" : { "type": "keyword" } } From 8cda31d7159de5c310a099939c2c621edaae5793 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 23 Aug 2018 18:14:59 -0700 Subject: [PATCH 092/126] Adding mapping template reapply to 3.4.0 migration --- .../view_repo/actions/migrations/Migrate_3_4_0.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java index 57cb2875..8d712f30 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java @@ -3,7 +3,9 @@ import com.google.gson.JsonObject; import gov.nasa.jpl.view_repo.db.ElasticHelper; import gov.nasa.jpl.view_repo.db.PostgresHelper; +import gov.nasa.jpl.view_repo.util.JsonUtil; import gov.nasa.jpl.view_repo.util.Sjm; +import java.io.InputStream; import java.sql.PreparedStatement; import java.sql.Timestamp; import java.text.ParseException; @@ -11,6 +13,7 @@ import java.util.Date; import java.util.List; import java.util.Map; +import java.util.Scanner; import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Logger; @@ -35,6 +38,14 @@ public static boolean apply(ServiceRegistry services) throws Exception { boolean noErrors = true; + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + InputStream resourceAsStream = classLoader.getResourceAsStream("mapping_template.json"); + Scanner s = new Scanner(resourceAsStream).useDelimiter("\\A"); + if (s.hasNext()) { + JsonObject mappingTemplate = JsonUtil.buildFromString(s.next()); + eh.applyTemplate(mappingTemplate.toString()); + } + List> orgs = pgh.getOrganizations(null); for (Map org : orgs) { From e803be87a59dcb95c223e19a07248572dec52546 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Fri, 24 Aug 2018 14:49:49 -0700 Subject: [PATCH 093/126] removing redundant functions from elastic helper --- .../nasa/jpl/view_repo/db/ElasticHelper.java | 73 +------------------ .../view_repo/db/ElasticsearchInterface.java | 8 -- .../nasa/jpl/view_repo/util/CommitUtil.java | 8 +- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 14 ++-- .../webscripts/UserPreferencesPost.java | 3 +- 5 files changed, 14 insertions(+), 92 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java index 881c0149..14ccbbfa 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java @@ -134,38 +134,18 @@ public void updateClusterSettings(String payload) throws IOException { client.execute(updateSettings); } - /** - * Gets the JSON document of element type using a elastic _id (1) - * - * @param id _id elasticsearch property (2) - * @return JSONObject o or null - */ - public JsonObject getElementByElasticId(String id, String index) throws IOException { - // Cannot use method for commit type - return getByElasticId(id, index, ELEMENT); - } - - public JsonObject getProfileByElasticId(String id, String index) throws IOException { - // Cannot use method for commit type - return getByElasticId(id, index, PROFILE); - } - - public JsonObject getElementByElasticIdArtifact(String id, String index) throws IOException { - // Cannot use method for commit type - return getByElasticId(id, index, ARTIFACT); - } - public JsonObject getByElasticId(String id, String index, String type) throws IOException { Get get = new Get.Builder(index.toLowerCase().replaceAll("\\s+", ""), id).type(type).build(); JestResult result = client.execute(get); - if (result.isSucceeded()) { JsonObject o = result.getJsonObject().get("_source").getAsJsonObject(); o.add(Sjm.ELASTICID, result.getJsonObject().get("_id")); + if (type.equals(COMMIT)) { + o.add(Sjm.SYSMLID, result.getJsonObject().get("_id")); + } return o; } - return null; } @@ -259,42 +239,7 @@ public JsonArray getCommitHistory(String sysmlid, String index) throws IOExcepti return array; } - /** - * Gets the JSON document of commit type using a elastic _id (1) - * - * @param id _id elasticsearch property (2) - * @return JSONObject o or null - */ - public JsonObject getCommitByElasticId(String id, String index) throws IOException { - if (id == null) { - return null; - } - Get get = new Get.Builder(index.toLowerCase().replaceAll("\\s+", ""), id).type(COMMIT).build(); - - JestResult result = client.execute(get); - - if (!result.isSucceeded() && result.getResponseCode() != 404) { - throw new IOException( - String.format("Elasticsearch error[%1$s]:%2$s", - result.getResponseCode(), result.getErrorMessage())); - } else if (result.isSucceeded()) { - JsonObject o = result.getJsonObject().getAsJsonObject("_source"); - o.add(Sjm.SYSMLID, result.getJsonObject().get("_id")); - return o; - } - - return null; - } - - public JsonObject getElementByCommitId(String elasticId, String sysmlid, String index) throws IOException { - return getByCommitId(elasticId, sysmlid, index, ELEMENT); - } - - public JsonObject getArtifactByCommitId(String elasticId, String sysmlid, String index) throws IOException { - return getByCommitId(elasticId, sysmlid, index, ARTIFACT); - } - - private JsonObject getByCommitId(String elasticId, String sysmlid, String index, String type) throws IOException { + public JsonObject getByCommitId(String elasticId, String sysmlid, String index, String type) throws IOException { String query = String.format(COMMIT_QUERY, Sjm.COMMITID, elasticId, Sjm.SYSMLID, sysmlid); if (logger.isDebugEnabled()) { @@ -425,14 +370,6 @@ public boolean refreshIndex() throws IOException { return result.isSucceeded(); } - public JsonObject updateElement(String id, JsonObject payload, String index) throws IOException { - return updateById(id, payload, index, ELEMENT); - } - - public JsonObject updateProfile(String id, JsonObject payload, String index) throws IOException { - return updateById(id, payload, index, PROFILE); - } - public JsonObject updateById(String id, JsonObject payload, String index, String type) throws IOException { JsonObject upsert = new JsonObject(); upsert.add("doc", payload); @@ -447,8 +384,6 @@ public JsonObject updateById(String id, JsonObject payload, String index, String return new JsonObject(); } - - /** * Index multiple JSON documents by type using the BulkAPI (1) * diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java index feb57cfb..3e3f2aad 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java @@ -18,20 +18,12 @@ public interface ElasticsearchInterface { void deleteIndex(String index) throws IOException; - JsonObject getElementByElasticId(String id, String index) throws IOException; - JsonArray getCommitHistory(String sysmlid, String index) throws IOException; - JsonObject getCommitByElasticId(String id, String index) throws IOException; - - JsonObject getElementByCommitId(String elasticId, String sysmlid, String index) throws IOException; - JsonArray getElementsFromElasticIds(List ids, String index) throws IOException; ElasticResult indexElement(JsonObject j, String index, String eType) throws IOException; - JsonObject updateElement(String id, JsonObject payload, String index) throws IOException; - boolean refreshIndex() throws IOException; boolean bulkIndexElements(JsonArray bulkElements, String operation, boolean refresh, String index, String type) throws IOException; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index b95bcfc0..01694672 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -60,7 +60,6 @@ public class CommitUtil { static Logger logger = Logger.getLogger(CommitUtil.class); public static final String TYPE_BRANCH = "BRANCH"; - public static final String TYPE_COMMIT = "COMMIT"; public static final String TYPE_DELTA = "DELTA"; public static final String TYPE_MERGE = "MERGE"; @@ -74,7 +73,6 @@ public class CommitUtil { private static final String INITIALCOMMIT = "initialcommit"; private static final String LASTCOMMIT = "lastcommit"; private static final String ARTIFACTS = "artifacts"; - private static final String CONTENTTYPE = "contentType"; private static final String HOLDING_BIN_PREFIX = "holding_bin_"; @@ -174,10 +172,6 @@ public static boolean isGroup(JsonObject element) { return element.has(Sjm.ISGROUP) && element.get(Sjm.ISGROUP).getAsBoolean(); } - public static JsonObject indexProfile(String id, JsonObject elements, String index) throws IOException { - return eh.updateProfile(id, elements, index); - } - private static boolean bulkElasticEntry(JsonArray elements, String operation, boolean refresh, String index, String type) { if (elements.size() > 0) { @@ -681,7 +675,7 @@ public static JsonObject sendOrganizationDelta(String orgId, String orgName, Jso pgh.updateOrganization(orgId, orgName); orgJson.addProperty(Sjm.ELASTICID, orgId); if (eh.updateById(orgId, orgJson, defaultIndex, ElasticHelper.ELEMENT).size() > 0 && eh.refreshIndex()) { - return eh.getElementByElasticId(orgId, defaultIndex); + return eh.getByElasticId(orgId, defaultIndex, ElasticHelper.ELEMENT); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index c1b5c157..6b25a456 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -89,7 +89,7 @@ public JsonArray getOrganization(String orgId) { List> organizations = pgh.getOrganizations(orgId); for (Map n : organizations) { try { - JsonObject current = eh.getElementByElasticId(n.get(ORG_ID), EmsConfig.get("elastic.index.element")); + JsonObject current = eh.getByElasticId(n.get(ORG_ID), EmsConfig.get("elastic.index.element"), ElasticHelper.ELEMENT); if (current != null) { orgs.add(current); } else { @@ -199,7 +199,7 @@ public JsonArray getFullMounts(List found) { public JsonObject getElementByElementAndCommitId(String sysmlid, String commitId) { try { - return eh.getElementByCommitId(commitId, sysmlid, projectId); + return eh.getByCommitId(commitId, sysmlid, projectId, ElasticHelper.ELEMENT); } catch (IOException e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); } @@ -208,7 +208,7 @@ public JsonObject getElementByElementAndCommitId(String sysmlid, String commitId public JsonObject getArtifactByArtifactAndCommitId(String sysmlid, String commitId) { try { - return eh.getArtifactByCommitId(commitId, sysmlid, projectId); + return eh.getByCommitId(commitId, sysmlid, projectId, ElasticHelper.ARTIFACT); } catch (IOException e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); } @@ -239,7 +239,7 @@ private JsonObject getNodeBySysmlid(String sysmlid, String workspaceName, boolea String elasticId = pgh.getElasticIdFromSysmlId(sysmlid); if (elasticId != null) { try { - JsonObject result = eh.getElementByElasticId(elasticId, projectId); + JsonObject result = eh.getByElasticId(elasticId, projectId, ElasticHelper.ELEMENT); if (result != null) { result.addProperty(Sjm.PROJECTID, this.projectId); result.addProperty(Sjm.REFID, this.workspaceName); @@ -390,7 +390,7 @@ public JsonObject getArtifactById(String sysmlid, boolean withDeleted) { String artifact = pgh.getElasticIdFromSysmlIdArtifact(sysmlid, withDeleted); if (artifact != null) { try { - return eh.getElementByElasticIdArtifact(artifact, projectId); + return eh.getByElasticId(artifact, projectId, ElasticHelper.ARTIFACT); } catch (IOException e) { e.printStackTrace(); } @@ -1557,7 +1557,7 @@ public List getSites(boolean sites, boolean sitepackages) { public JsonObject getCommitObject(String commitId) { try { - return eh.getCommitByElasticId(commitId, projectId); + return eh.getByElasticId(commitId, projectId, ElasticHelper.COMMIT); } catch (IOException e) { logger.debug(String.format("%s", LogUtil.getStackTrace(e))); } @@ -1974,7 +1974,7 @@ public static String md5Hash(String str) { } public JsonObject getProfile(String id) throws IOException { - return eh.getProfileByElasticId(id, "mms"); + return eh.getByElasticId(id, EmsConfig.get("elastic.index.element"), ElasticHelper.PROFILE); } public static String md5Hash(File file) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesPost.java index 228db2e0..6bc95df5 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesPost.java @@ -27,6 +27,7 @@ package gov.nasa.jpl.view_repo.webscripts; import gov.nasa.jpl.mbee.util.Timer; +import gov.nasa.jpl.view_repo.db.ElasticHelper; import gov.nasa.jpl.view_repo.util.*; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -87,7 +88,7 @@ public UserPreferencesPost(Repository repositoryHelper, ServiceRegistry registry JsonObject postJson = postJsonTop.get(Sjm.PROFILES).getAsJsonObject(); // creates a new document if one didn't exist, otherwise updates existing document - JsonObject res = CommitUtil.indexProfile(username, postJson, elementIndex); + JsonObject res = (new ElasticHelper()).updateById(username, postJson, elementIndex, ElasticHelper.PROFILE); if (res != null && res.size() > 0) { response.add(Sjm.PROFILES, res); } else { From d2eacb42a5502fbc34fb51c18a83e6aa59f36a2c Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Sat, 25 Aug 2018 11:08:33 -0700 Subject: [PATCH 094/126] cleaning element and artifact gets --- .../nasa/jpl/view_repo/util/EmsNodeUtil.java | 60 ++----- .../jpl/view_repo/webscripts/ArtifactGet.java | 147 ++--------------- .../view_repo/webscripts/ArtifactsGet.java | 107 ++----------- .../jpl/view_repo/webscripts/ModelGet.java | 150 +++++++++--------- .../jpl/view_repo/webscripts/ModelsGet.java | 68 ++------ .../webscripts/UserPreferencesGet.java | 3 +- .../output/baseline/DeleteArtifact.json | 26 ++- .../output/baseline/GetImage.json | 3 +- .../baseline/GetImageInMountedProject.json | 1 + .../04__image_handling/01__master.robot | 4 +- 10 files changed, 161 insertions(+), 408 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java index 6b25a456..e9812dd0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsNodeUtil.java @@ -197,18 +197,9 @@ public JsonArray getFullMounts(List found) { return mounts; } - public JsonObject getElementByElementAndCommitId(String sysmlid, String commitId) { + public JsonObject getByCommitId(String sysmlid, String commitId, String type) { try { - return eh.getByCommitId(commitId, sysmlid, projectId, ElasticHelper.ELEMENT); - } catch (IOException e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - } - return new JsonObject(); - } - - public JsonObject getArtifactByArtifactAndCommitId(String sysmlid, String commitId) { - try { - return eh.getByCommitId(commitId, sysmlid, projectId, ElasticHelper.ARTIFACT); + return eh.getByCommitId(commitId, sysmlid, projectId, type.contains("element") ? ElasticHelper.ELEMENT : ElasticHelper.ARTIFACT); } catch (IOException e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); } @@ -261,9 +252,9 @@ public JsonArray getNodesBySysmlids(Set sysmlids, boolean withChildViews return getJsonByElasticIds(elasticids, withChildViews); } - public JsonArray getArtifactsBySysmlids(Set sysmlids, boolean withChildViews, boolean withDeleted) { + public JsonArray getArtifactsBySysmlids(Set sysmlids, boolean withDeleted) { List elasticIds = pgh.getElasticIdsFromSysmlIdsArtifacts(new ArrayList<>(sysmlids), withDeleted); - return getJsonByElasticIds(elasticIds, withChildViews); + return getJsonByElasticIds(elasticIds, false); } public JsonArray getJsonByElasticIds(List elasticIds, boolean withChildViews) { @@ -386,19 +377,6 @@ public JsonArray getChildrenIds(String sysmlid, DbEdgeTypes dbEdge, final Long m return children; } - public JsonObject getArtifactById(String sysmlid, boolean withDeleted) { - String artifact = pgh.getElasticIdFromSysmlIdArtifact(sysmlid, withDeleted); - if (artifact != null) { - try { - return eh.getByElasticId(artifact, projectId, ElasticHelper.ARTIFACT); - } catch (IOException e) { - e.printStackTrace(); - } - } - return new JsonObject(); - } - - public JsonArray getChildren(String sysmlid, DbEdgeTypes dbEdge, final Long maxDepth) { Set children = new HashSet<>(); @@ -578,7 +556,7 @@ public JsonObject processPostJson(JsonArray elements, String user, Set o Map existingMap = (!type.equals("Artifact")) ? convertToMap(getNodesBySysmlids(sysmlids, false, true)) : - convertToMap(getArtifactsBySysmlids(sysmlids, false, true)); + convertToMap(getArtifactsBySysmlids(sysmlids, true)); for (int i = 0; i < elements.size(); i++) { JsonObject o = elements.get(i).getAsJsonObject(); @@ -827,7 +805,7 @@ private void reorderChildViews(JsonObject element, JsonArray newElements, JsonAr getProjectWithFullMounts(JsonUtil.getOptString(ownedAttribute, Sjm.PROJECTID), JsonUtil.getOptString(ownedAttribute, Sjm.REFID), null); } - handleMountSearch(mountJson, false, false, 0L, childViewsSet, childViews); + handleMountSearch(mountJson, false, false, 0L, childViewsSet, childViews, null, Sjm.ELEMENTS); } catch (Exception e) { logger.warn(String.format("%s", LogUtil.getStackTrace(e))); } @@ -1353,10 +1331,6 @@ public JsonObject processMove(JsonArray moveData) { return wrapper; } - public boolean isDeleted(String sysmlid) { - return pgh.isDeleted(sysmlid); - } - public boolean orgExists(String orgName) { return orgName.equals("swsdp") || pgh.orgExists(orgName); } @@ -1464,13 +1438,7 @@ private JsonObject addExtendedInformationForElement(JsonObject element, } public static void handleMountSearch(JsonObject mountsJson, boolean extended, boolean extraDocs, - final Long maxDepth, Set elementsToFind, JsonArray result) throws IOException { - - handleMountSearch(mountsJson, extended, extraDocs, maxDepth, elementsToFind, result, null, null); - } - - public static void handleMountSearch(JsonObject mountsJson, boolean extended, boolean extraDocs, - final Long maxDepth, Set elementsToFind, JsonArray result, String timestamp, String type) + Long maxDepth, Set elementsToFind, JsonArray result, String timestamp, String type) throws IOException { if (elementsToFind.isEmpty() || mountsJson == null) { return; @@ -1485,8 +1453,8 @@ public static void handleMountSearch(JsonObject mountsJson, boolean extended, bo extended = false; extraDocs = false; - if (type != null && type.contains("artifacts")) { - nodeList = emsNodeUtil.getArtifactsBySysmlids(elementsToFind, false, true); + if (type != null && type.equals(Sjm.ARTIFACTS)) { + nodeList = emsNodeUtil.getArtifactsBySysmlids(elementsToFind, true); } else { nodeList = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); } @@ -1506,8 +1474,10 @@ public static void handleMountSearch(JsonObject mountsJson, boolean extended, bo } } } else { - if (type != null && type.contains("artifacts")) { - nodeList = emsNodeUtil.getArtifactsBySysmlids(elementsToFind, false, false); + if (type != null && type.equals(Sjm.ARTIFACTS)) { + extended = false; + maxDepth = 0L; + nodeList = emsNodeUtil.getArtifactsBySysmlids(elementsToFind, false); } else { nodeList = emsNodeUtil.getNodesBySysmlids(elementsToFind, true, false); } @@ -1973,10 +1943,6 @@ public static String md5Hash(String str) { return DigestUtils.md5Hex(str); } - public JsonObject getProfile(String id) throws IOException { - return eh.getByElasticId(id, EmsConfig.get("elastic.index.element"), ElasticHelper.PROFILE); - } - public static String md5Hash(File file) { String digest = null; try (FileInputStream fin = new FileInputStream(file)) { diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java index cf23715a..dcde59ca 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java @@ -34,6 +34,7 @@ import javax.servlet.http.HttpServletResponse; +import com.google.gson.*; import gov.nasa.jpl.view_repo.util.*; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -44,11 +45,6 @@ import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - import gov.nasa.jpl.mbee.util.Timer; /** @@ -61,10 +57,6 @@ public class ArtifactGet extends ModelGet { static Logger logger = Logger.getLogger(ArtifactGet.class); - private static final String ARTIFACTID = "artifactId"; - private static final String COMMITID = "commitId"; - private static final String CONTENTTYPE = "contentType"; - public ArtifactGet() { super(); } @@ -83,141 +75,28 @@ public ArtifactGet(Repository repositoryHelper, ServiceRegistry registry) { @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { String user = AuthenticationUtil.getFullyAuthenticatedUser(); - printHeader(user, logger, req); + printHeader(user, logger, req, true); Timer timer = new Timer(); Map model = new HashMap<>(); - JsonObject top = new JsonObject(); - - String[] accepts = req.getHeaderValues("Accept"); - String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; - - if (logger.isDebugEnabled()) { - logger.debug(String.format("Accept: %s", accept)); - } - boolean isCommit = req.getParameter(COMMITID) != null && !req.getParameter(COMMITID).isEmpty(); - // :TODO refactor to handle the response consistently - try { - if (isCommit) { - JsonArray commitJsonToArray = new JsonArray(); - JsonObject commitJson = handleCommitRequest(req); - commitJsonToArray.add(commitJson); - if (commitJson == null || commitJson.size() == 0) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); - } - if (commitJson != null && commitJson.size() > 0) { - top.add(Sjm.ARTIFACTS, filterByPermission(commitJsonToArray, req)); - } - if (top.has(Sjm.ARTIFACTS) && top.get(Sjm.ARTIFACTS).getAsJsonArray().size() < 1) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); - } - status.setCode(responseStatus.getCode()); - if (prettyPrint || accept.contains("webp")) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - model.put(Sjm.RES, gson.toJson(top)); - } else { - model.put(Sjm.RES, top); - } - } else { - model = handleArtifactGet(req, status, accept); - } - } catch (Exception e) { - log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal error", e); - } - - printFooter(user, logger, timer); - - return model; - } - - private JsonObject handleCommitRequest(WebScriptRequest req) { - // getElement at commit - String projectId = getProjectId(req); - String refId = getRefId(req); - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - - String artifactId = req.getServiceMatch().getTemplateVars().get(ARTIFACTID); - String commitId = req.getParameter(COMMITID); - if (emsNodeUtil.getArtifactById(artifactId, true) != null) { - JsonObject artifact = emsNodeUtil.getArtifactByArtifactAndCommitId(artifactId, commitId); - if (artifact == null || artifact.size() == 0) { - // :TODO I don't think this logic needs to be changed at all for Artifact - //this is true if element id and artifact id are mutually unique - return emsNodeUtil.getElementAtCommit(artifactId, commitId); - } else { - return artifact; - } - } - - JsonObject mountsJson = new JsonObject(); - mountsJson.addProperty(Sjm.SYSMLID, projectId); - mountsJson.addProperty(Sjm.REFID, refId); - // convert commitId to timestamp - String commit = emsNodeUtil.getCommitObject(commitId).get(Sjm.CREATED).getAsString(); - - JsonArray result = new JsonArray(); - Set elementsToFind = new HashSet<>(); - elementsToFind.add(artifactId); - try { - EmsNodeUtil.handleMountSearch(mountsJson, false, false, 0L, elementsToFind, result, commit, "artifacts"); - if (result.size() > 0) { - return JsonUtil.getOptObject(result, 0); + if (validateRequest(req, status)) { + JsonObject result = handleRequest(req, 0L, Sjm.ARTIFACTS); + model = finish(req, result, true, Sjm.ARTIFACTS); } + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); + } catch (JsonParseException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); } catch (Exception e) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Could not find artifact %s at commit %s", artifactId, - commitId); logger.error(String.format("%s", LogUtil.getStackTrace(e))); + log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error"); } - return new JsonObject(); - } - - protected Map handleArtifactGet(WebScriptRequest req, Status status, String accept) { - - Map model = new HashMap<>(); - - if (validateRequest(req, status)) { - JsonObject result = null; - String artifactId = req.getServiceMatch().getTemplateVars().get(ARTIFACTID); - String projectId = getProjectId(req); - String refId = getRefId(req); - if (artifactId != null) { - JsonObject mountsJson = new JsonObject(); - mountsJson.addProperty(Sjm.SYSMLID, projectId); - mountsJson.addProperty(Sjm.REFID, refId); - - JsonArray results = new JsonArray(); - Set elementsToFind = new HashSet<>(); - elementsToFind.add(artifactId); - try { - EmsNodeUtil - .handleMountSearch(mountsJson, false, false, 0L, elementsToFind, results, null, "artifacts"); - if (results.size() > 0) { - result = JsonUtil.getOptObject(results, 0); - } - } catch (IOException e) { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Artifact not found!\n"); - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - } - if (result != null) { - JsonObject r = new JsonObject(); - JsonArray array = new JsonArray(); - array.add(result); - r.add("artifacts", array); - model.put(Sjm.RES, r); - } else { - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Artifact not found!\n"); - } - } else { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "ArtifactId not supplied!\n"); - } - } else { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Invalid request!"); - } - status.setCode(responseStatus.getCode()); - if (!model.containsKey(Sjm.RES)) { + if (model.isEmpty()) { model.put(Sjm.RES, createResponseJson()); } + status.setCode(responseStatus.getCode()); + printFooter(user, logger, timer); return model; } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java index 66c49970..4fe0e25f 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java @@ -38,6 +38,7 @@ import javax.servlet.http.HttpServletResponse; +import com.google.gson.*; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; @@ -47,11 +48,6 @@ import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - import gov.nasa.jpl.mbee.util.Timer; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; @@ -83,104 +79,33 @@ public ArtifactsGet(Repository repositoryHelper, ServiceRegistry registry) { @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { String user = AuthenticationUtil.getFullyAuthenticatedUser(); - printHeader(user, logger, req); + if (logger.isDebugEnabled()) { + printHeader(user, logger, req); + } else { + printHeader(user, logger, req, true); + } Timer timer = new Timer(); - String[] accepts = req.getHeaderValues("Accept"); - String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; - Map model = new HashMap<>(); - JsonArray elementsJson = new JsonArray(); - Map> errors = new HashMap<>(); - JsonObject result = new JsonObject(); - try { - if (validateRequest(req, status)) { - result = handleRequest(req); - elementsJson = JsonUtil.getOptArray(result, Sjm.ARTIFACTS); - } - - JsonObject top = new JsonObject(); - if (elementsJson != null && elementsJson.size() > 0) { - JsonArray elements = filterByPermission(elementsJson, req); - if (elements.size() == 0) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); - } - - top.add(Sjm.ARTIFACTS, elements); - - JsonArray errorMessages = parseErrors(errors); - - if (errorMessages.size() > 0) { - top.add("messages", errorMessages); - } - - if (prettyPrint || accept.contains("webp")) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - model.put(Sjm.RES, gson.toJson(top)); - } else { - model.put(Sjm.RES, top); - } - } else { - log(Level.INFO, HttpServletResponse.SC_OK, "No elements found"); - top.add(Sjm.ARTIFACTS, new JsonArray()); - model.put(Sjm.RES, top); + JsonObject result = handleRequest(req, 0L, Sjm.ARTIFACTS); + model = finish(req, result, false, Sjm.ARTIFACTS); } + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); + } catch (JsonParseException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); } catch (Exception e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); + log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error"); + } + if (model.isEmpty()) { + model.put(Sjm.RES, createResponseJson()); } - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return model; } - - /** - * Wrapper for handling a request and getting the appropriate JSONArray of - * elements - * - * @param req - * @return - * @throws IOException - */ - private JsonObject handleRequest(WebScriptRequest req) - throws IOException, SQLException { - JsonObject requestJson = JsonUtil.buildFromString(req.getContent().getContent()); - if (requestJson.has(Sjm.ARTIFACTS)) { - JsonArray elementsToFindJson = requestJson.get(Sjm.ARTIFACTS).getAsJsonArray(); - - String refId = getRefId(req); - String projectId = getProjectId(req); - String commitId = req.getParameter(Sjm.COMMITID.replace("_","")); - - JsonObject mountsJson = new JsonObject(); - mountsJson.addProperty(Sjm.SYSMLID, projectId); - mountsJson.addProperty(Sjm.REFID, refId); - - JsonArray found = new JsonArray(); - JsonObject result = new JsonObject(); - - Set uniqueElements = new HashSet<>(); - for (int i = 0; i < elementsToFindJson.size(); i++) { - uniqueElements.add(elementsToFindJson.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); - } - - EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); - JsonObject commitObject = emsNodeUtil.getCommitObject(commitId); - - String timestamp = - commitObject != null && commitObject.has(Sjm.CREATED) ? commitObject.get(Sjm.CREATED).getAsString() : null; - - EmsNodeUtil.handleMountSearch(mountsJson, false, false, 0L, uniqueElements, found, timestamp, "artifacts"); - result.add(Sjm.ARTIFACTS, found); - JsonUtil.addStringSet(result, Sjm.FAILED, uniqueElements); - return result; - } else { - return new JsonObject(); - } - } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 873abd56..457869a0 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -67,7 +67,7 @@ public class ModelGet extends AbstractJavaWebScript { static Logger logger = Logger.getLogger(ModelGet.class); private static final String ELEMENTID = "elementId"; - private static final String COMMITID = "commitId"; + protected static final String ARTIFACTID = "artifactId"; protected Set elementsToFind = new HashSet<>(); protected JsonArray deletedElementsCache = new JsonArray(); @@ -109,83 +109,80 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { String user = AuthenticationUtil.getFullyAuthenticatedUser(); - - if (logger.isDebugEnabled()) { - printHeader(user, logger, req); - } else { - printHeader(user, logger, req, true); - } - + printHeader(user, logger, req, true); Timer timer = new Timer(); - String[] accepts = req.getHeaderValues("Accept"); - String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; - Map model = new HashMap<>(); - Map> errors = new HashMap<>(); - JsonArray elementsJson = new JsonArray(); - JsonObject result = new JsonObject(); - try { - if (validateRequest(req, status)) { - try { - Long depth = getDepthFromRequest(req); - result = handleRequest(req, depth, "elements"); - elementsJson = JsonUtil.getOptArray(result, Sjm.ELEMENTS); - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); - } catch (JsonParseException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); - } + Long depth = getDepthFromRequest(req); + JsonObject result = handleRequest(req, depth, Sjm.ELEMENTS); + model = finish(req, result, true, Sjm.ELEMENTS); } + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); + } catch (JsonParseException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); + } catch (Exception e) { + logger.error(String.format("%s", LogUtil.getStackTrace(e))); + } + if (model.isEmpty()) { + model.put(Sjm.RES, createResponseJson()); + } + status.setCode(responseStatus.getCode()); + printFooter(user, logger, timer); + return model; + } - JsonObject top = new JsonObject(); - - if (elementsJson.size() > 0) { - top.add(Sjm.ELEMENTS, filterByPermission(elementsJson, req)); - if (top.get(Sjm.ELEMENTS).getAsJsonArray().size() < 1) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); + protected Map finish(WebScriptRequest req, JsonObject result, boolean single, String type) { + String object = type.equals(Sjm.ELEMENTS) ? "element" : "artifact"; + Map> errors = new HashMap<>(); + JsonArray elementsJson = JsonUtil.getOptArray(result, type); + JsonObject top = new JsonObject(); + JsonArray got = filterByPermission(elementsJson, req); + if (elementsJson.size() > 0) { + top.add(type, got); + if (got.size() < 1) { + responseStatus.setCode(HttpServletResponse.SC_FORBIDDEN); + } + } + if (deletedElementsCache.size() > 0) { + JsonArray deleted = filterByPermission(deletedElementsCache, req); + if (deleted.size() > 0) { + Set deletedSet = new HashSet<>(); + for (int i = 0; i < deleted.size(); i++) { + deletedSet.add(deleted.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); } - } else if (deletedElementsCache.size() > 0) { - JsonArray deleted = filterByPermission(deletedElementsCache, req); - if (deleted.size() > 0) { - Set deletedSet = new HashSet<>(); - for (int i = 0; i < deleted.size(); i++) { - deletedSet.add(deleted.get(i).getAsJsonObject().get(Sjm.SYSMLID).getAsString()); - } - elementsToFind.removeAll(deletedSet); - errors.put(Sjm.DELETED, deletedSet); - top.add(Sjm.DELETED, deleted); - log(Level.ERROR, HttpServletResponse.SC_GONE, "Deleted elements found"); + elementsToFind.removeAll(deletedSet); + errors.put(Sjm.DELETED, deletedSet); + top.add(Sjm.DELETED, deleted); + if (single) { + responseStatus.setCode(HttpServletResponse.SC_GONE); } } - if (!elementsToFind.isEmpty()) { - errors.put(Sjm.FAILED, elementsToFind); - log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "No elements found."); - } - - JsonArray errorMessages = parseErrors(errors); - - if (errorMessages.size() > 0) { - top.add("messages", errorMessages); - } - - if (prettyPrint || accept.contains("webp")) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - model.put(Sjm.RES, gson.toJson(top)); - } else { - model.put(Sjm.RES, top); + } + if (!elementsToFind.isEmpty()) { + errors.put(Sjm.FAILED, elementsToFind); + if (single) { + responseStatus.setCode(HttpServletResponse.SC_NOT_FOUND); } - - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); } - status.setCode(responseStatus.getCode()); + JsonArray errorMessages = parseErrors(errors); + if (errorMessages.size() > 0) { + top.add("messages", errorMessages); + } - printFooter(user, logger, timer); + String[] accepts = req.getHeaderValues("Accept"); + String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; + Map model = new HashMap<>(); + if (prettyPrint || accept.contains("html")) { + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + model.put(Sjm.RES, gson.toJson(top)); + } else { + model.put(Sjm.RES, top); + } return model; } @@ -199,30 +196,31 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { */ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, String type) throws IOException { JsonObject requestJson = JsonUtil.buildFromString(req.getContent().getContent()); + String templateVar = type.equals(Sjm.ELEMENTS) ? ELEMENTID : ARTIFACTID; String refId = getRefId(req); String projectId = getProjectId(req); String commitId = req.getParameter(Sjm.COMMITID.replace("_", "")); - String elementId = req.getServiceMatch().getTemplateVars().get(ELEMENTID); + String elementId = req.getServiceMatch().getTemplateVars().get(templateVar); EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, refId); JsonArray elementsToFindJson = new JsonArray(); if (elementId != null) { - if (commitId != null && emsNodeUtil.getById(elementId) != null) { - JsonObject element = emsNodeUtil.getElementByElementAndCommitId(elementId, commitId); + if (commitId != null) { + JsonObject element = emsNodeUtil.getByCommitId(elementId, commitId, type); if (element != null && element.size() > 0) { JsonObject result = new JsonObject(); JsonArray elements = new JsonArray(); elements.add(element); - result.add(Sjm.ELEMENTS, elements); + result.add(type, elements); return result; } } JsonObject element = new JsonObject(); element.addProperty(Sjm.SYSMLID, elementId); elementsToFindJson.add(element); - } else if (requestJson.has(Sjm.ELEMENTS)) { - elementsToFindJson = requestJson.get(Sjm.ELEMENTS).getAsJsonArray(); + } else if (requestJson.has(type)) { + elementsToFindJson = requestJson.get(type).getAsJsonArray(); } else { return new JsonObject(); } @@ -255,12 +253,16 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St elementsToFind = new HashSet<>(); log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Invalid commit id"); } else { - EmsNodeUtil - .handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found, timestamp, type); + EmsNodeUtil.handleMountSearch(mountsJson, extended, false, maxDepth, elementsToFind, found, timestamp, type); } if (!elementsToFind.isEmpty()) { - JsonArray deletedElementsJson = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); + JsonArray deletedElementsJson; + if (type.equals(Sjm.ELEMENTS)) { + deletedElementsJson = emsNodeUtil.getNodesBySysmlids(elementsToFind, false, true); + } else { + deletedElementsJson = emsNodeUtil.getArtifactsBySysmlids(elementsToFind, true); + } if (timestamp != null) { for (JsonElement check : deletedElementsJson) { try { @@ -279,9 +281,7 @@ protected JsonObject handleRequest(WebScriptRequest req, final Long maxDepth, St this.deletedElementsCache = deletedElementsJson; } } - - result.add(Sjm.ELEMENTS, found); - + result.add(type, found); return result; } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java index 57cb82c6..5d2c2499 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java @@ -87,70 +87,28 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { } else { printHeader(user, logger, req, true); } - Timer timer = new Timer(); - - String[] accepts = req.getHeaderValues("Accept"); - String accept = (accepts != null && accepts.length != 0) ? accepts[0] : ""; - Map model = new HashMap<>(); - Map> errors = new HashMap<>(); - JsonArray elementsJson = new JsonArray(); - JsonObject result = new JsonObject(); - try { - if (validateRequest(req, status)) { - try { - Long depth = getDepthFromRequest(req); - result = - (!req.getContent().getContent().isEmpty()) ? handleRequest(req, depth, "elements") : getAllElements(req); - elementsJson = JsonUtil.getOptArray(result, Sjm.ELEMENTS); - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); - } catch (JsonParseException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); - } - } - - JsonObject top = new JsonObject(); - if (elementsJson.size() > 0) { - JsonArray elements = filterByPermission(elementsJson, req); - if (elements.size() == 0) { - log(Level.ERROR, HttpServletResponse.SC_FORBIDDEN, "Permission denied."); - } - top.add(Sjm.ELEMENTS, elements); - } else { - log(Level.INFO, HttpServletResponse.SC_NOT_FOUND, "No elements found"); - top.add(Sjm.ELEMENTS, new JsonArray()); - } - - if (!elementsToFind.isEmpty()) { - errors.put(Sjm.FAILED, elementsToFind); - log(Level.ERROR, HttpServletResponse.SC_OK, "Some elements not found."); + Long depth = getDepthFromRequest(req); + JsonObject result = + (!req.getContent().getContent().isEmpty()) ? handleRequest(req, depth, Sjm.ELEMENTS) : getAllElements(req); + model = finish(req, result, false, Sjm.ELEMENTS); } - - JsonArray errorMessages = parseErrors(errors); - - if (errorMessages.size() > 0) { - top.add("messages", errorMessages); - } - - if (prettyPrint || accept.contains("webp")) { - Gson gson = new GsonBuilder().setPrettyPrinting().create(); - model.put(Sjm.RES, gson.toJson(top)); - } else { - model.put(Sjm.RES, top); - } - + } catch (IllegalStateException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); + } catch (JsonParseException e) { + log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); } catch (Exception e) { logger.error(String.format("%s", LogUtil.getStackTrace(e))); + log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error"); + } + if (model.isEmpty()) { + model.put(Sjm.RES, createResponseJson()); } - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return model; } @@ -177,7 +135,7 @@ private JsonObject getAllElements(WebScriptRequest req) { JsonArray elements = emsNodeUtil.getJsonByElasticIds(elementsToFindJson, false); result.add(Sjm.ELEMENTS, elements); } else { - result = emsNodeUtil.getModelAtCommit(commitId); + result = emsNodeUtil.getModelAtCommit(commitId); //this now gets all artifacts too } if (extended && commitId == null) { extendedElements diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesGet.java index c34b3943..61e8faf3 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/UserPreferencesGet.java @@ -27,6 +27,7 @@ package gov.nasa.jpl.view_repo.webscripts; import gov.nasa.jpl.mbee.util.Timer; +import gov.nasa.jpl.view_repo.db.ElasticHelper; import gov.nasa.jpl.view_repo.util.*; import org.alfresco.repo.model.Repository; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -83,7 +84,7 @@ public UserPreferencesGet(Repository repositoryHelper, ServiceRegistry registry) try { if (validateRequest(req, status)) { EmsNodeUtil emsNodeUtil = new EmsNodeUtil(); - JsonObject res = emsNodeUtil.getProfile(username); + JsonObject res = (new ElasticHelper()).getByElasticId(username, EmsConfig.get("elastic.index.element"), ElasticHelper.PROFILE); if (res != null && res.size() > 0) { response.add(Sjm.PROFILES, res); } else { diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteArtifact.json b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteArtifact.json index 1d02a9d1..6f77a10a 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/DeleteArtifact.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/DeleteArtifact.json @@ -1,3 +1,25 @@ { - "message": "[ERROR]: Artifact not found!" -} \ No newline at end of file + "deleted": [ + { + "_creator": "admin", + "_editable": true, + "_inRefIds": [ + "master" + ], + "_modifier": "admin", + "_projectId": "PA", + "_refId": "master", + "checksum": "3bb7ef11b648725af351525ba6e77a38", + "contentType": "image/png", + "id": "deleteArtifact", + "type": "Artifact" + } + ], + "messages": [ + { + "code": 410.0, + "id": "deleteArtifact", + "message": "Element deleteArtifact was not found" + } + ] +} diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetImage.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetImage.json index 30cf0df9..97838c79 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetImage.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetImage.json @@ -2,6 +2,7 @@ "artifacts": [ { "_creator": "admin", + "_editable": true, "_modifier": "admin", "_projectId": "PA", "_refId": "master", @@ -11,4 +12,4 @@ "type": "Artifact" } ] -} \ No newline at end of file +} diff --git a/mms-ent/runner/src/test/robotframework/output/baseline/GetImageInMountedProject.json b/mms-ent/runner/src/test/robotframework/output/baseline/GetImageInMountedProject.json index 1e62905a..4d86bcc5 100644 --- a/mms-ent/runner/src/test/robotframework/output/baseline/GetImageInMountedProject.json +++ b/mms-ent/runner/src/test/robotframework/output/baseline/GetImageInMountedProject.json @@ -2,6 +2,7 @@ "artifacts": [ { "_creator": "admin", + "_editable": true, "_modifier": "admin", "_projectId": "PB", "_refId": "master", diff --git a/mms-ent/runner/src/test/robotframework/suites/04__image_handling/01__master.robot b/mms-ent/runner/src/test/robotframework/suites/04__image_handling/01__master.robot index 4a3dd366..ce5b7bb6 100644 --- a/mms-ent/runner/src/test/robotframework/suites/04__image_handling/01__master.robot +++ b/mms-ent/runner/src/test/robotframework/suites/04__image_handling/01__master.robot @@ -203,8 +203,8 @@ DeleteArtifact Should Be Equal ${result.status_code} ${200} # Try to get element ${result} = requests.Get url=${ROOT}/projects/PA/refs/master/artifacts/deleteArtifact headers=&{REQ_HEADER} - Should Be Equal ${result.status_code} ${404} - ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _modified + Should Be Equal ${result.status_code} ${410} + ${filter} = Create List _commitId nodeRefId versionedRefId _created read lastModified _modified siteCharacterizationId time_total _elasticId _timestamp _modified artifactLocation Generate JSON ${TEST_NAME} ${result.json()} ${filter} ${compare_result} = Compare JSON ${TEST_NAME} Should Match Baseline ${compare_result} From 1e663cbaf5bb556e05a4e21539f62e16a57f999e Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Sat, 25 Aug 2018 21:33:36 -0700 Subject: [PATCH 095/126] simplify more --- .../webscripts/AbstractJavaWebScript.java | 3 -- .../jpl/view_repo/webscripts/ArtifactGet.java | 37 ++------------ .../view_repo/webscripts/ArtifactsGet.java | 45 ++--------------- .../jpl/view_repo/webscripts/ModelGet.java | 19 +++++--- .../jpl/view_repo/webscripts/ModelsGet.java | 48 ++----------------- 5 files changed, 24 insertions(+), 128 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java index 719d438d..fc0fb064 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/AbstractJavaWebScript.java @@ -67,9 +67,6 @@ public abstract class AbstractJavaWebScript extends DeclarativeJavaWebScript { private static Logger logger = Logger.getLogger(AbstractJavaWebScript.class); - static boolean checkMmsVersions = false; - private JsonObject privateRequestJSON = null; - // injected members protected ServiceRegistry services; // get any of the Alfresco services protected Repository repository; // used for lucene search diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java index dcde59ca..f2a9158d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactGet.java @@ -27,26 +27,17 @@ package gov.nasa.jpl.view_repo.webscripts; import java.io.IOException; -import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; - -import javax.servlet.http.HttpServletResponse; import com.google.gson.*; import gov.nasa.jpl.view_repo.util.*; import org.alfresco.repo.model.Repository; -import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; -import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import gov.nasa.jpl.mbee.util.Timer; - /** * Descriptor in /view-repo/src/main/amp/config/alfresco/extension/templates/webscripts * /gov/nasa/jpl/javawebscripts/model.get.desc.xml @@ -73,30 +64,8 @@ public ArtifactGet(Repository repositoryHelper, ServiceRegistry registry) { return instance.executeImplImpl(req, status, cache); } - @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { - String user = AuthenticationUtil.getFullyAuthenticatedUser(); - printHeader(user, logger, req, true); - Timer timer = new Timer(); - - Map model = new HashMap<>(); - try { - if (validateRequest(req, status)) { - JsonObject result = handleRequest(req, 0L, Sjm.ARTIFACTS); - model = finish(req, result, true, Sjm.ARTIFACTS); - } - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); - } catch (JsonParseException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error"); - } - if (model.isEmpty()) { - model.put(Sjm.RES, createResponseJson()); - } - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return model; + @Override protected Map getModel(WebScriptRequest req) throws IOException { + JsonObject result = handleRequest(req, 0L, Sjm.ARTIFACTS); + return finish(req, result, true, Sjm.ARTIFACTS); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java index 4fe0e25f..74f64f45 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ArtifactsGet.java @@ -30,29 +30,16 @@ package gov.nasa.jpl.view_repo.webscripts; import java.io.IOException; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; - -import javax.servlet.http.HttpServletResponse; import com.google.gson.*; import org.alfresco.repo.model.Repository; -import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; -import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import gov.nasa.jpl.mbee.util.Timer; - -import gov.nasa.jpl.view_repo.util.EmsNodeUtil; -import gov.nasa.jpl.view_repo.util.JsonUtil; -import gov.nasa.jpl.view_repo.util.LogUtil; import gov.nasa.jpl.view_repo.util.Sjm; /** @@ -77,35 +64,9 @@ public ArtifactsGet(Repository repositoryHelper, ServiceRegistry registry) { return instance.executeImplImpl(req, status, cache); } - @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { - String user = AuthenticationUtil.getFullyAuthenticatedUser(); - if (logger.isDebugEnabled()) { - printHeader(user, logger, req); - } else { - printHeader(user, logger, req, true); - } - Timer timer = new Timer(); - - Map model = new HashMap<>(); - try { - if (validateRequest(req, status)) { - JsonObject result = handleRequest(req, 0L, Sjm.ARTIFACTS); - model = finish(req, result, false, Sjm.ARTIFACTS); - } - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); - } catch (JsonParseException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error"); - } - if (model.isEmpty()) { - model.put(Sjm.RES, createResponseJson()); - } - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return model; + @Override protected Map getModel(WebScriptRequest req) throws IOException { + JsonObject result = handleRequest(req, 0L, Sjm.ARTIFACTS); + return finish(req, result, false, Sjm.ARTIFACTS); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java index 457869a0..cd1b930b 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelGet.java @@ -66,7 +66,7 @@ public class ModelGet extends AbstractJavaWebScript { static Logger logger = Logger.getLogger(ModelGet.class); - private static final String ELEMENTID = "elementId"; + protected static final String ELEMENTID = "elementId"; protected static final String ARTIFACTID = "artifactId"; protected Set elementsToFind = new HashSet<>(); @@ -109,15 +109,17 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { String user = AuthenticationUtil.getFullyAuthenticatedUser(); - printHeader(user, logger, req, true); + if (logger.isDebugEnabled()) { + printHeader(user, logger, req); + } else { + printHeader(user, logger, req, true); + } Timer timer = new Timer(); Map model = new HashMap<>(); try { if (validateRequest(req, status)) { - Long depth = getDepthFromRequest(req); - JsonObject result = handleRequest(req, depth, Sjm.ELEMENTS); - model = finish(req, result, true, Sjm.ELEMENTS); + model = getModel(req); } } catch (IllegalStateException e) { log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); @@ -134,8 +136,13 @@ public ModelGet(Repository repositoryHelper, ServiceRegistry registry) { return model; } + protected Map getModel(WebScriptRequest req) throws IOException { + Long depth = getDepthFromRequest(req); + JsonObject result = handleRequest(req, depth, Sjm.ELEMENTS); + return finish(req, result, true, Sjm.ELEMENTS); + } + protected Map finish(WebScriptRequest req, JsonObject result, boolean single, String type) { - String object = type.equals(Sjm.ELEMENTS) ? "element" : "artifact"; Map> errors = new HashMap<>(); JsonArray elementsJson = JsonUtil.getOptArray(result, type); JsonObject top = new JsonObject(); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java index 5d2c2499..966be84d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ModelsGet.java @@ -32,29 +32,17 @@ import java.io.IOException; import java.util.*; -import javax.servlet.http.HttpServletResponse; - import org.alfresco.repo.model.Repository; -import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.ServiceRegistry; -import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; - -import gov.nasa.jpl.mbee.util.TimeUtils; -import gov.nasa.jpl.mbee.util.Timer; import gov.nasa.jpl.view_repo.util.EmsNodeUtil; -import gov.nasa.jpl.view_repo.util.JsonUtil; -import gov.nasa.jpl.view_repo.util.LogUtil; import gov.nasa.jpl.view_repo.util.Sjm; /** @@ -79,37 +67,11 @@ public ModelsGet(Repository repositoryHelper, ServiceRegistry registry) { return instance.executeImplImpl(req, status, cache); } - @Override protected Map executeImplImpl(WebScriptRequest req, Status status, Cache cache) { - String user = AuthenticationUtil.getFullyAuthenticatedUser(); - - if (logger.isDebugEnabled()) { - printHeader(user, logger, req); - } else { - printHeader(user, logger, req, true); - } - Timer timer = new Timer(); - Map model = new HashMap<>(); - try { - if (validateRequest(req, status)) { - Long depth = getDepthFromRequest(req); - JsonObject result = - (!req.getContent().getContent().isEmpty()) ? handleRequest(req, depth, Sjm.ELEMENTS) : getAllElements(req); - model = finish(req, result, false, Sjm.ELEMENTS); - } - } catch (IllegalStateException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "unable to get JSON object from request", e); - } catch (JsonParseException e) { - log(Level.ERROR, HttpServletResponse.SC_BAD_REQUEST, "Malformed JSON request", e); - } catch (Exception e) { - logger.error(String.format("%s", LogUtil.getStackTrace(e))); - log(Level.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Server Error"); - } - if (model.isEmpty()) { - model.put(Sjm.RES, createResponseJson()); - } - status.setCode(responseStatus.getCode()); - printFooter(user, logger, timer); - return model; + @Override protected Map getModel(WebScriptRequest req) throws IOException { + Long depth = getDepthFromRequest(req); + JsonObject result = + (!req.getContent().getContent().isEmpty()) ? handleRequest(req, depth, Sjm.ELEMENTS) : getAllElements(req); + return finish(req, result, false, Sjm.ELEMENTS); } /** From e9794d30476a893335359880e128f622731c5f87 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 27 Aug 2018 10:13:12 -0700 Subject: [PATCH 096/126] Use getByElasticId in migration --- .../nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java index 8d712f30..5ea5921c 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java @@ -58,7 +58,7 @@ public static boolean apply(ServiceRegistry services) throws Exception { for (Map commit : commits) { String commitId = commit.get("commitId"); if (!commitId.isEmpty()) { - JsonObject commitObject = eh.getCommitByElasticId(commitId, projectId); + JsonObject commitObject = eh.getByElasticId(commitId, projectId, ElasticHelper.COMMIT); if (commitObject.has(Sjm.CREATED)) { String query = "UPDATE \"commits\" SET timestamp = ? WHERE elasticid = ?"; try (PreparedStatement statement = pgh.prepareStatement(query)) { From 2df7d972b47a174e1e10bf80be794938ea1f6714 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 27 Aug 2018 10:19:44 -0700 Subject: [PATCH 097/126] Fix migration for 3.3.0 when handling file with no version history --- .../nasa/jpl/view_repo/actions/migrations/Migrate_3_3_0.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_3_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_3_0.java index 2d7991d2..b0b4cadc 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_3_0.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_3_0.java @@ -278,8 +278,11 @@ public static boolean apply(ServiceRegistry services) throws Exception { List files = fileFolderService.list(refNode.getNodeRef()); for (FileInfo file : files) { - if (!file.isFolder()) { + if (file != null && !file.isFolder()) { VersionHistory versionHistory = versionService.getVersionHistory(file.getNodeRef()); + if (versionHistory == null) { + continue; + } List versions = new ArrayList<>(versionHistory.getAllVersions()); ListIterator it = versions.listIterator(versions.size()); From b904673e6154e5b9ef5c03bce04a510681ab43ed Mon Sep 17 00:00:00 2001 From: Jason Han Date: Mon, 27 Aug 2018 11:20:46 -0700 Subject: [PATCH 098/126] Some cleanup and adding ref move to migration --- mms-ent/pom.xml | 2 +- mms-ent/repo-amp/pom.xml | 2 +- .../actions/migrations/Migrate_3_4_0.java | 33 ++++++++++++++++--- .../nasa/jpl/view_repo/db/ElasticHelper.java | 2 +- .../view_repo/db/ElasticsearchInterface.java | 2 +- .../view_repo/webscripts/ProjectDelete.java | 12 ++++--- mms-ent/repo/pom.xml | 2 +- mms-ent/runner/pom.xml | 2 +- mms-ent/share-amp/pom.xml | 2 +- mms-ent/share/pom.xml | 2 +- mms-ent/solr-config/pom.xml | 2 +- 11 files changed, 45 insertions(+), 18 deletions(-) diff --git a/mms-ent/pom.xml b/mms-ent/pom.xml index 73362684..36d72a4e 100755 --- a/mms-ent/pom.xml +++ b/mms-ent/pom.xml @@ -4,7 +4,7 @@ 4.0.0 gov.nasa.jpl.mbee mms-ent - 3.3.1-SNAPSHOT + 3.4.0-SNAPSHOT Alfresco Repository and Share Quickstart with database and an embedded Tomcat runner. This All-in-One project allows to manage all the components involved in Alfresco development (Repo, Share, Solr4, AMPs) in one project diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 98cf2022..f76be529 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -10,7 +10,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.1-SNAPSHOT + 3.4.0-SNAPSHOT diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java index 5ea5921c..4ca963ce 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java @@ -1,6 +1,9 @@ package gov.nasa.jpl.view_repo.actions.migrations; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import gov.nasa.jpl.view_repo.db.ElasticHelper; import gov.nasa.jpl.view_repo.db.PostgresHelper; import gov.nasa.jpl.view_repo.util.JsonUtil; @@ -11,9 +14,11 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Scanner; +import java.util.Set; import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Logger; @@ -21,12 +26,13 @@ public class Migrate_3_4_0 { static Logger logger = Logger.getLogger(Migrate_3_4_0.class); private static final SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + private static JsonParser parser = new JsonParser(); private static final String transientSettings = "{\"transient\": {\"script.max_compilations_per_minute\":120}}"; - private static final String searchQuery = - "{\"query\":{\"bool\": {\"filter\":[{\"term\":{\"_projectId\":\"%1$s\"}},{\"term\":{\"id\":\"%2$s\"}},{\"term\":{\"_modified\":\"%3$s\"}}]}}, \"from\": 0, \"size\": 1}"; + private static final String searchQuery = "{\"query\": {\"type\" : {\"value\": \"ref\"}}}"; + private static final String updateQuery = "UPDATE \"commits\" SET timestamp = ? WHERE elasticid = ?"; public static boolean apply(ServiceRegistry services) throws Exception { logger.info("Running Migrate_3_4_0"); @@ -54,14 +60,33 @@ public static boolean apply(ServiceRegistry services) throws Exception { for (Map project : projects) { String projectId = project.get(Sjm.SYSMLID).toString(); pgh.setProject(projectId); + + JsonObject refs = eh.search(parser.parse(searchQuery).getAsJsonObject()); + Set refsToMove = new HashSet<>(); + JsonArray payload = new JsonArray(); + if (refs.has("elements")) { + for (JsonElement ref : refs.get("elements").getAsJsonArray()) { + if (ref.getAsJsonObject().get(Sjm.ELASTICID) != null) { + refsToMove.add(ref.getAsJsonObject().get(Sjm.ELASTICID).getAsString()); + payload.add(ref.getAsJsonObject()); + } + } + + if (!refsToMove.isEmpty()) { + eh.bulkDeleteByType(refsToMove, projectId, ElasticHelper.ELEMENT); + if (eh.refreshIndex()) { + eh.bulkIndexElements(payload, "added", true, projectId, ElasticHelper.REF); + } + } + } + List> commits = pgh.getAllCommits(); for (Map commit : commits) { String commitId = commit.get("commitId"); if (!commitId.isEmpty()) { JsonObject commitObject = eh.getByElasticId(commitId, projectId, ElasticHelper.COMMIT); if (commitObject.has(Sjm.CREATED)) { - String query = "UPDATE \"commits\" SET timestamp = ? WHERE elasticid = ?"; - try (PreparedStatement statement = pgh.prepareStatement(query)) { + try (PreparedStatement statement = pgh.prepareStatement(updateQuery)) { Date created = df.parse(commitObject.get(Sjm.CREATED).getAsString()); Timestamp ts = new Timestamp(created.getTime()); statement.setTimestamp(1, ts); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java index 14ccbbfa..9f644c7c 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticHelper.java @@ -510,7 +510,7 @@ public JsonObject searchLiteral(JsonObject queryJson) throws IOException { * @param ids * @return JSONObject Result */ - public JsonObject bulkDeleteByType(String type, ArrayList ids, String index) { + public JsonObject bulkDeleteByType(Set ids, String index, String type) { if (ids.isEmpty()) { return new JsonObject(); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java index 3e3f2aad..2352db9e 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/ElasticsearchInterface.java @@ -32,7 +32,7 @@ public interface ElasticsearchInterface { JsonObject search(JsonObject queryJson) throws IOException; - JsonObject bulkDeleteByType(String type, ArrayList ids, String index); + JsonObject bulkDeleteByType(Set ids, String index, String type); JsonObject getElementsLessThanOrEqualTimestamp(String sysmlId, String timestamp, List refsCommitIds, String index); diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectDelete.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectDelete.java index f94ad6e9..cd9fc31c 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectDelete.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectDelete.java @@ -3,9 +3,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpServletResponse; import gov.nasa.jpl.view_repo.db.ElasticHelper; @@ -76,7 +78,7 @@ public ProjectDelete(Repository repositoryHelper, ServiceRegistry registry) { deleteProjectSiteFolder(projectId); // Postgres helper to commit elasticids before dropping db - ArrayList commitList = getCommitElasticIDs(projectId); + Set commitList = getCommitElasticIDs(projectId); // Search and delete for all elements in elasticsearch with project id deleteCommitsInElastic(commitList, projectId); @@ -124,8 +126,8 @@ public ProjectDelete(Repository repositoryHelper, ServiceRegistry registry) { * @param projectId * @return CommitElasticIDs */ - protected ArrayList getCommitElasticIDs(String projectId) { - ArrayList commitIds = new ArrayList<>(); + protected Set getCommitElasticIDs(String projectId) { + Set commitIds = new HashSet<>(); logger.debug("Getting Commit Elastic IDs for " + projectId); // Instantiate and configure pgh. @@ -147,12 +149,12 @@ protected ArrayList getCommitElasticIDs(String projectId) { * @param commitIds * @return */ - protected void deleteCommitsInElastic(ArrayList commitIds, String projectId) { + protected void deleteCommitsInElastic(Set commitIds, String projectId) { logger.debug("Deleting commits in Elastic"); try { ElasticHelper elasticHelper = new ElasticHelper(); - elasticHelper.bulkDeleteByType("commit", commitIds, projectId); + elasticHelper.bulkDeleteByType(commitIds, projectId, ElasticHelper.COMMIT); } catch (IOException e) { logger.error(e.getMessage()); } catch (Exception e) { diff --git a/mms-ent/repo/pom.xml b/mms-ent/repo/pom.xml index 7a741c95..f847eab9 100755 --- a/mms-ent/repo/pom.xml +++ b/mms-ent/repo/pom.xml @@ -18,7 +18,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.1-SNAPSHOT + 3.4.0-SNAPSHOT diff --git a/mms-ent/runner/pom.xml b/mms-ent/runner/pom.xml index 9ad1da49..047a8f4a 100755 --- a/mms-ent/runner/pom.xml +++ b/mms-ent/runner/pom.xml @@ -9,7 +9,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.1-SNAPSHOT + 3.4.0-SNAPSHOT diff --git a/mms-ent/share-amp/pom.xml b/mms-ent/share-amp/pom.xml index d55086ff..2231a970 100644 --- a/mms-ent/share-amp/pom.xml +++ b/mms-ent/share-amp/pom.xml @@ -9,7 +9,7 @@ gov.nasa.jpl.mbee mms-ent - 3.3.1-SNAPSHOT + 3.4.0-SNAPSHOT @@ -346,11 +348,13 @@ swagger-codegen-mathematica-client 1.0.1 + From 0eb922c4e9550968bac80703aa08a04b1cfa1669 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Fri, 31 Aug 2018 06:33:40 -0700 Subject: [PATCH 113/126] Handle null value in PostgresPool --- .../src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java | 2 +- .../src/main/java/gov/nasa/jpl/view_repo/util/EmsConfig.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java index 404d1a8f..4aad6d58 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/db/PostgresPool.java @@ -67,7 +67,7 @@ private PostgresPool(String host, String name) { this.bds.setTimeBetweenEvictionRunsMillis(1000 * 60); this.bds.setMinEvictableIdleTimeMillis(1000 * 60 * 5); - if (EmsConfig.get(PG_SEC).toLowerCase().equals("true")) { + if (EmsConfig.get(PG_SEC) != null && EmsConfig.get(PG_SEC).equalsIgnoreCase("true")) { this.bds.setConnectionProperties("ssl=true"); } } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsConfig.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsConfig.java index 28b62108..4bca5d7f 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsConfig.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/EmsConfig.java @@ -23,8 +23,7 @@ public static void setAlfrescoProperties(Properties alfrescoProperties) { } public static String get(String key) { - String value = EmsConfig.properties.getProperty(key); - return value != null ? value : ""; + return EmsConfig.properties.getProperty(key); } public static void setProperty(String key, String value) { From 18c0b9afdbe68973a3726ccf8046b7f10e3035b4 Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Thu, 6 Sep 2018 10:53:10 -0700 Subject: [PATCH 114/126] fill in mappings to prevent accidental conflicts --- .../actions/migrations/Migrate_3_4_0.java | 2 ++ .../src/main/resources/mapping_template.json | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java index 3ea01ca3..2585f81b 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java @@ -71,6 +71,8 @@ public static boolean apply(ServiceRegistry services) throws Exception { if (mappingTemplate.isJsonObject()) { eh.updateMapping(projectId, ElasticHelper.REF, mappingTemplate.get("mappings").getAsJsonObject().get(ElasticHelper.REF).getAsJsonObject().toString()); + eh.updateMapping(projectId, ElasticHelper.PROFILE, + mappingTemplate.get("mappings").getAsJsonObject().get(ElasticHelper.PROFILE).getAsJsonObject().toString()); } List> allRefs = pgh.getRefsElastic(true); diff --git a/mms-ent/repo-amp/src/main/resources/mapping_template.json b/mms-ent/repo-amp/src/main/resources/mapping_template.json index 64e1e27a..537061d5 100644 --- a/mms-ent/repo-amp/src/main/resources/mapping_template.json +++ b/mms-ent/repo-amp/src/main/resources/mapping_template.json @@ -229,6 +229,18 @@ } }, "profile": { + "dynamic_templates": [ + { + "id_as_keywords": { + "match_mapping_type": "string", + "match_pattern": "regex", + "match": ".*(Id|Ids)", + "mapping": { + "type": "keyword" + } + } + } + ], "properties": { "username": { "type": "keyword" @@ -251,6 +263,26 @@ "properties": { "status" : { "type": "keyword" + }, + "_created": { + "type": "date", + "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + }, + "_modified": { + "type": "date", + "format": "yyyy-MM-dd'T'HH:mm:ss.SSSZ" + }, + "_creator": { + "type": "keyword" + }, + "_modifier": { + "type": "keyword" + }, + "type": { + "type": "keyword" + }, + "id": { + "type": "keyword" } } } From 8df3d55cdd11fc8e40ec53614bb5cc5b9e8dce5d Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Mon, 10 Sep 2018 09:46:09 -0700 Subject: [PATCH 115/126] profile mappings are in default index --- .../jpl/view_repo/actions/migrations/Migrate_3_4_0.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java index 2585f81b..0e633049 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/migrations/Migrate_3_4_0.java @@ -6,6 +6,7 @@ import gov.nasa.jpl.mbee.util.Pair; import gov.nasa.jpl.view_repo.db.ElasticHelper; import gov.nasa.jpl.view_repo.db.PostgresHelper; +import gov.nasa.jpl.view_repo.util.EmsConfig; import gov.nasa.jpl.view_repo.util.JsonUtil; import gov.nasa.jpl.view_repo.util.Sjm; import java.io.InputStream; @@ -58,7 +59,8 @@ public static boolean apply(ServiceRegistry services) throws Exception { mappingTemplate = JsonUtil.buildFromString(s.next()); eh.applyTemplate(mappingTemplate.toString()); } - + eh.updateMapping(EmsConfig.get("elastic.index.element"), ElasticHelper.PROFILE, + mappingTemplate.get("mappings").getAsJsonObject().get(ElasticHelper.PROFILE).getAsJsonObject().toString()); List> orgs = pgh.getOrganizations(null); for (Map org : orgs) { @@ -71,8 +73,6 @@ public static boolean apply(ServiceRegistry services) throws Exception { if (mappingTemplate.isJsonObject()) { eh.updateMapping(projectId, ElasticHelper.REF, mappingTemplate.get("mappings").getAsJsonObject().get(ElasticHelper.REF).getAsJsonObject().toString()); - eh.updateMapping(projectId, ElasticHelper.PROFILE, - mappingTemplate.get("mappings").getAsJsonObject().get(ElasticHelper.PROFILE).getAsJsonObject().toString()); } List> allRefs = pgh.getRefsElastic(true); From e93d2074459d650a07ec1f645b3855ec0b927d0e Mon Sep 17 00:00:00 2001 From: "Lam, Doris T" Date: Mon, 10 Sep 2018 09:48:46 -0700 Subject: [PATCH 116/126] add id and type to profile mapping --- .../repo-amp/src/main/resources/mapping_template.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mms-ent/repo-amp/src/main/resources/mapping_template.json b/mms-ent/repo-amp/src/main/resources/mapping_template.json index 537061d5..10bb7bc0 100644 --- a/mms-ent/repo-amp/src/main/resources/mapping_template.json +++ b/mms-ent/repo-amp/src/main/resources/mapping_template.json @@ -239,6 +239,16 @@ "type": "keyword" } } + }, + { + "id_and_type": { + "match_mapping_type": "string", + "match_pattern": "regex", + "match": "(id|ids|type|uri|URI)", + "mapping": { + "type": "keyword" + } + } } ], "properties": { From 6a9dab0ffe3189451650e0a6b2b8a97d1e090ef9 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 12 Sep 2018 10:35:09 -0700 Subject: [PATCH 117/126] Adding in check before project creation attempt --- .../nasa/jpl/view_repo/util/CommitUtil.java | 4 ---- .../jpl/view_repo/webscripts/ProjectPost.java | 23 +++++++++---------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index 323042a6..cdd7f841 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -12,11 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java index bbf17cf7..99297710 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/webscripts/ProjectPost.java @@ -109,15 +109,17 @@ public ProjectPost(Repository repositoryHelper, ServiceRegistry registry) { orgId = emsNodeUtil.getOrganizationFromProject(projectId); } - SiteInfo siteInfo = services.getSiteService().getSite(orgId); - if (siteInfo != null) { - - CommitUtil.sendProjectDelta(projJson, orgId, user); - - if (projectId != null && !projectId.equals(NO_SITE_ID)) { - responseStatus.setCode(updateOrCreateProject(projJson, projectId, orgId)); + EmsScriptNode siteNode = getSiteNode(orgId); + if (siteNode != null) { + if (siteNode.checkPermissions(PermissionService.WRITE)) { + CommitUtil.sendProjectDelta(projJson, orgId, user); + if (projectId != null && !projectId.equals(NO_SITE_ID)) { + responseStatus.setCode(updateOrCreateProject(projJson, projectId, orgId)); + } else { + responseStatus.setCode(checkNoProject(siteNode)); + } } else { - responseStatus.setCode(updateOrCreateProject(projJson, projectId)); + responseStatus.setCode(HttpServletResponse.SC_FORBIDDEN); } if (responseStatus.getCode() == HttpServletResponse.SC_OK) { @@ -125,7 +127,6 @@ public ProjectPost(Repository repositoryHelper, ServiceRegistry registry) { } else { failure.add(projJson); } - } else { EmsNodeUtil emsNodeUtil = new EmsNodeUtil(projectId, NO_WORKSPACE_ID); // This should not happen, since the Organization should be created before a Project is posted @@ -175,9 +176,7 @@ public ProjectPost(Repository repositoryHelper, ServiceRegistry registry) { return model; } - public int updateOrCreateProject(JsonObject jsonObject, String projectId) { - EmsScriptNode projectNode = getSiteNode(projectId); - + public int checkNoProject(EmsScriptNode projectNode) { if (projectNode == null) { log(Level.ERROR, HttpServletResponse.SC_NOT_FOUND, "Could not find project"); return HttpServletResponse.SC_NOT_FOUND; From d02eba34f7dbc58a754d3969e073ceefabc7020f Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 13 Sep 2018 10:48:59 -0700 Subject: [PATCH 118/126] Use same value for send --- .../main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java | 4 ++-- .../java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java index 255b20cd..e9234f5d 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/actions/ActionUtil.java @@ -29,7 +29,7 @@ package gov.nasa.jpl.view_repo.actions; -import gov.nasa.jpl.view_repo.util.EmsNodeUtil; +import gov.nasa.jpl.view_repo.util.EmsConfig; import gov.nasa.jpl.view_repo.util.EmsScriptNode; import org.alfresco.repo.action.executer.MailActionExecuter; @@ -60,7 +60,7 @@ public static void sendEmailToModifier(EmsScriptNode node, String msg, String su EmsScriptNode user = new EmsScriptNode(services.getPersonService().getPerson(username), services); String recipient = (String) user.getProperty("cm:email"); - String sender = EmsNodeUtil.getHostname() + "@jpl.nasa.gov"; + String sender = EmsConfig.get("app.email.from"); sendEmailTo(sender, recipient, msg, subject, services); } diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java index d1899f1b..9aa513c8 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java @@ -11,6 +11,7 @@ import gov.nasa.jpl.view_repo.util.JsonUtil; import gov.nasa.jpl.view_repo.util.LogUtil; import gov.nasa.jpl.view_repo.util.Sjm; +import org.alfresco.service.ServiceRegistry; import org.apache.log4j.Logger; import com.google.gson.JsonArray; From 873f049d7a8c586d93d9169ebd632a5536e9d32d Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 13 Sep 2018 11:40:31 -0700 Subject: [PATCH 119/126] Add error logging to branch task --- .../main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java index 9aa513c8..4e2e84d7 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/tasks/BranchTask.java @@ -294,7 +294,9 @@ public void done() { Transport.send(msg); } catch (SendFailedException sfe) { + logger.error("Could not send email: ", sfe); } catch (Exception e) { + logger.error("Sending Email Exception: ", e); } } From c3c75d6f355c3c7cf8186c71694b4b87b60f18e1 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 13 Sep 2018 14:58:30 -0700 Subject: [PATCH 120/126] Update project json instead of inserting new --- .../gov/nasa/jpl/view_repo/util/CommitUtil.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index cdd7f841..6418baec 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -1,5 +1,6 @@ package gov.nasa.jpl.view_repo.util; +import gov.nasa.jpl.view_repo.db.Node; import java.io.IOException; import java.sql.SQLException; import java.sql.Savepoint; @@ -755,12 +756,14 @@ public static void sendProjectDelta(JsonObject o, String orgId, String user) { try { ElasticHelper eh = new ElasticHelper(); - eh.createIndex(projectSysmlid); - eProject = eh.indexElement(project, projectSysmlid, ElasticHelper.ELEMENT); - eh.refreshIndex(); + Node projectNode = pgh.getNodeFromSysmlId(projectSysmlid); // only insert if the project does not exist already - if (pgh.getNodeFromSysmlId(projectSysmlid) == null) { + if (projectNode == null) { + eh.createIndex(projectSysmlid); + eProject = eh.indexElement(project, projectSysmlid, ElasticHelper.ELEMENT); + eh.refreshIndex(); + eProjectHoldingBin = eh.indexElement(projectHoldingBin, projectSysmlid, ElasticHelper.ELEMENT); eViewInstanceBin = eh.indexElement(viewInstanceBin, projectSysmlid, ElasticHelper.ELEMENT); eh.refreshIndex(); @@ -783,7 +786,8 @@ public static void sendProjectDelta(JsonObject o, String orgId, String user) { jmsMsg.addProperty("source", "mms"); sendJmsMsg(jmsMsg, TYPE_DELTA, null, projectSysmlid); } else { - pgh.updateElasticId(projectSysmlid, eProject.elasticId); + eh.updateById(projectNode.getElasticId(), project, projectSysmlid, ElasticHelper.ELEMENT); + eh.refreshIndex(); } } catch (Exception e) { if (logger.isDebugEnabled()) { From 9b30727cab8ccda8967738a298791e0a4cf8faaf Mon Sep 17 00:00:00 2001 From: Jason Han Date: Wed, 19 Sep 2018 10:13:18 -0700 Subject: [PATCH 121/126] Remove created and creator for updated project element --- .../src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java index 6418baec..a1fb3ffa 100644 --- a/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java +++ b/mms-ent/repo-amp/src/main/java/gov/nasa/jpl/view_repo/util/CommitUtil.java @@ -786,6 +786,8 @@ public static void sendProjectDelta(JsonObject o, String orgId, String user) { jmsMsg.addProperty("source", "mms"); sendJmsMsg(jmsMsg, TYPE_DELTA, null, projectSysmlid); } else { + project.remove(Sjm.CREATED); + project.remove(Sjm.CREATOR); eh.updateById(projectNode.getElasticId(), project, projectSysmlid, ElasticHelper.ELEMENT); eh.refreshIndex(); } From ff2b549ffa88a827ce47db95d7d2b130066a3086 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 20 Sep 2018 13:40:08 -0700 Subject: [PATCH 122/126] Adding bintray repo and matlab client --- .circleci/config.yml | 3 +++ mms-ent/repo-amp/pom.xml | 14 +++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 8fc117a0..84f10c69 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -74,6 +74,9 @@ jobs: - run: name: Send mms mathematica client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + - run: + name: Send mms matlab client + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-matlab-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-matlab-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true workflows: version: 2 diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index 5732e0a6..b7b8cdb5 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -47,6 +47,14 @@ jcenter https://jcenter.bintray.com/ + + bintray-openmbee-maven + bintray-plugins + https://dl.bintray.com/openmbee/maven + + false + + @@ -348,13 +354,11 @@ swagger-codegen-mathematica-client 1.0.1 - From 0a00b2bfd59531c2bafc14192a672c18c16ac111 Mon Sep 17 00:00:00 2001 From: Jason Han Date: Thu, 20 Sep 2018 13:48:57 -0700 Subject: [PATCH 123/126] Fix version to snapshot --- .circleci/config.yml | 14 +++++++------- .circleci/config.yml.template | 3 +++ mms-ent/pom.xml | 2 +- mms-ent/repo-amp/pom.xml | 2 +- mms-ent/repo/pom.xml | 2 +- mms-ent/runner/pom.xml | 2 +- mms-ent/share-amp/pom.xml | 2 +- mms-ent/share/pom.xml | 2 +- mms-ent/solr-config/pom.xml | 2 +- 9 files changed, 17 insertions(+), 14 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 84f10c69..d3af91ec 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,25 +58,25 @@ jobs: command: ./jfrog rt config --url $ARTIFACTORY_URL --user $ARTIFACTORY_USER --apikey $ARTIFACTORY_APIKEY --interactive false - run: name: Send mms-amp - command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-amp/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-amp/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms-share-amp - command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/share-amp/target/*.amp' libs-snapshot-local/gov/nasa/jpl/mms/mms-share-amp/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/mms-java-*.jar' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms java client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-java-client/pom.xml' libs-snapshot-local/gov/nasa/jpl/mms/mms-java-client/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms python client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-python-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-python-client/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms mathematica client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true - run: name: Send mms matlab client - command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-matlab-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-matlab-client/3.4.0/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-matlab-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-matlab-client/3.4.0-SNAPSHOT/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true workflows: version: 2 diff --git a/.circleci/config.yml.template b/.circleci/config.yml.template index 66f53d57..3092ff7a 100644 --- a/.circleci/config.yml.template +++ b/.circleci/config.yml.template @@ -74,6 +74,9 @@ jobs: - run: name: Send mms mathematica client command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-mathematica-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-mathematica-client/${version}/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true + - run: + name: Send mms matlab client + command: ./jfrog rt u 'mms-ent/repo-amp/target/mms-matlab-*.zip' libs-snapshot-local/gov/nasa/jpl/mms/mms-matlab-client/${version}/ --build-name=mms-circleci --build-number=$CIRCLE_BUILD_NUM --flat=true workflows: version: 2 diff --git a/mms-ent/pom.xml b/mms-ent/pom.xml index 8fab76ce..36d72a4e 100755 --- a/mms-ent/pom.xml +++ b/mms-ent/pom.xml @@ -4,7 +4,7 @@ 4.0.0 gov.nasa.jpl.mbee mms-ent - 3.4.0 + 3.4.0-SNAPSHOT Alfresco Repository and Share Quickstart with database and an embedded Tomcat runner. This All-in-One project allows to manage all the components involved in Alfresco development (Repo, Share, Solr4, AMPs) in one project diff --git a/mms-ent/repo-amp/pom.xml b/mms-ent/repo-amp/pom.xml index b7b8cdb5..94fd518e 100755 --- a/mms-ent/repo-amp/pom.xml +++ b/mms-ent/repo-amp/pom.xml @@ -10,7 +10,7 @@ gov.nasa.jpl.mbee mms-ent - 3.4.0 + 3.4.0-SNAPSHOT diff --git a/mms-ent/repo/pom.xml b/mms-ent/repo/pom.xml index 44839c57..f847eab9 100755 --- a/mms-ent/repo/pom.xml +++ b/mms-ent/repo/pom.xml @@ -18,7 +18,7 @@ gov.nasa.jpl.mbee mms-ent - 3.4.0 + 3.4.0-SNAPSHOT diff --git a/mms-ent/runner/pom.xml b/mms-ent/runner/pom.xml index 4a30a1db..047a8f4a 100755 --- a/mms-ent/runner/pom.xml +++ b/mms-ent/runner/pom.xml @@ -9,7 +9,7 @@ gov.nasa.jpl.mbee mms-ent - 3.4.0 + 3.4.0-SNAPSHOT diff --git a/mms-ent/share-amp/pom.xml b/mms-ent/share-amp/pom.xml index 20e1202a..2231a970 100644 --- a/mms-ent/share-amp/pom.xml +++ b/mms-ent/share-amp/pom.xml @@ -9,7 +9,7 @@ gov.nasa.jpl.mbee mms-ent - 3.4.0 + 3.4.0-SNAPSHOT + package + + single + + + + assembly/mms-matlab-client.xml + + mms-matlab-client-${parent.version} false