In progress, not working

Project: http://git-wip-us.apache.org/repos/asf/usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/usergrid/commit/a5185f2e
Tree: http://git-wip-us.apache.org/repos/asf/usergrid/tree/a5185f2e
Diff: http://git-wip-us.apache.org/repos/asf/usergrid/diff/a5185f2e

Branch: refs/heads/USERGRID-933
Commit: a5185f2e72a3be91a8eac35f1b96a2cc1f72e8f8
Parents: 5ead5fd
Author: Mike Dunker <mdun...@apache.org>
Authored: Fri Sep 25 18:30:04 2015 -0700
Committer: Mike Dunker <mdun...@apache.org>
Committed: Fri Sep 25 18:30:04 2015 -0700

----------------------------------------------------------------------
 .../usergrid/corepersistence/CoreModule.java    |   6 +-
 .../corepersistence/CpEntityManagerFactory.java |  14 +-
 .../ManagementOrganizationDataMigration.java    | 155 +++++++++++++++++++
 .../corepersistence/util/CpNamingUtils.java     |  32 +++-
 .../persistence/EntityManagerFactory.java       |   2 +
 .../persistence/cassandra/CassandraService.java |   1 +
 .../usergrid/management/OrganizationConfig.java |   5 +
 .../cassandra/ManagementServiceImpl.java        |   6 +-
 .../migration/AppInfoMigrationPluginTest.java   |   2 +-
 9 files changed, 204 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
index 486aa6f..8e4e58f 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
@@ -16,6 +16,7 @@
 package org.apache.usergrid.corepersistence;
 
 
+import org.apache.usergrid.corepersistence.migration.*;
 import org.safehaus.guicyfig.GuicyFigModule;
 
 import org.apache.usergrid.corepersistence.asyncevents.AsyncEventService;
@@ -31,10 +32,6 @@ import 
org.apache.usergrid.corepersistence.index.IndexService;
 import org.apache.usergrid.corepersistence.index.IndexServiceImpl;
 import org.apache.usergrid.corepersistence.index.ReIndexService;
 import org.apache.usergrid.corepersistence.index.ReIndexServiceImpl;
-import org.apache.usergrid.corepersistence.migration.CoreMigration;
-import org.apache.usergrid.corepersistence.migration.CoreMigrationPlugin;
-import 
org.apache.usergrid.corepersistence.migration.DeDupConnectionDataMigration;
-import 
org.apache.usergrid.corepersistence.migration.MigrationModuleVersionPlugin;
 import org.apache.usergrid.corepersistence.pipeline.PipelineModule;
 import org.apache.usergrid.corepersistence.rx.impl.AllApplicationsObservable;
 import 
org.apache.usergrid.corepersistence.rx.impl.AllApplicationsObservableImpl;
@@ -131,6 +128,7 @@ public class CoreModule  extends AbstractModule {
 
 
         dataMigrationMultibinder.addBinding().to( 
DeDupConnectionDataMigration.class );
+        dataMigrationMultibinder.addBinding().to( 
ManagementOrganizationDataMigration.class );
 
 
         //wire up the collection migration plugin

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index 4bdade5..8985f3d 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@ -71,6 +71,7 @@ import org.apache.usergrid.persistence.model.entity.Id;
 import org.apache.usergrid.persistence.model.entity.SimpleId;
 import org.apache.usergrid.persistence.model.util.UUIDGenerator;
 import org.apache.usergrid.utils.UUIDUtils;
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
 
 import com.google.common.base.Optional;
 import com.google.common.cache.CacheBuilder;
@@ -166,7 +167,7 @@ public class CpEntityManagerFactory implements 
EntityManagerFactory, Application
             if ( em.getApplication() == null ) {
                 logger.info("Creating management application");
                 Map mgmtAppProps = new HashMap<String, Object>();
-                mgmtAppProps.put(PROPERTY_NAME, "systemapp");
+                mgmtAppProps.put(PROPERTY_NAME, 
CassandraService.MANAGEMENT_APPLICATION);
                 em.create( getManagementAppId(), TYPE_APPLICATION, 
mgmtAppProps);
                 em.getApplication();
             }
@@ -448,7 +449,7 @@ public class CpEntityManagerFactory implements 
EntityManagerFactory, Application
 
     @Override
     public Map<String, UUID> getApplications() throws Exception {
-        return getApplications( CpNamingUtils.getEdgeTypeFromCollectionName( 
CpNamingUtils.APPLICATION_INFOS ) );
+        return getApplications(CpNamingUtils.getEdgeTypeFromCollectionName( 
CpNamingUtils.APPLICATION_INFOS ) );
     }
 
 
@@ -504,7 +505,7 @@ public class CpEntityManagerFactory implements 
EntityManagerFactory, Application
                             final String applicationName = ( String ) 
entityData.getField( PROPERTY_NAME ).getValue();
 
                             appMap.put( applicationName , applicationId );
-                        } ).toBlocking().last();
+                    } ).toBlocking().last();
     }
 
 
@@ -578,7 +579,7 @@ public class CpEntityManagerFactory implements 
EntityManagerFactory, Application
 
         // intentionally going only one-level deep into fields and treating all
         // values as strings because that is all we need for service properties
-        for ( String key : properties.keySet() ) {
+        for ( String key : properties.keySet()) {
             propsEntity.setProperty(key, properties.get(key).toString());
         }
 
@@ -669,6 +670,11 @@ public class CpEntityManagerFactory implements 
EntityManagerFactory, Application
     }
 
     @Override
+    public UUID getManagementOrgId() {
+        return CpNamingUtils.MANAGEMENT_ORGANIZATION_ID;
+    }
+
+    @Override
     public EntityManager getManagementEntityManager() {
         return getEntityManager(CpNamingUtils.MANAGEMENT_APPLICATION_ID);
     }

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/ManagementOrganizationDataMigration.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/ManagementOrganizationDataMigration.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/ManagementOrganizationDataMigration.java
new file mode 100644
index 0000000..66f4b71
--- /dev/null
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/migration/ManagementOrganizationDataMigration.java
@@ -0,0 +1,155 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.usergrid.corepersistence.migration;
+
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import org.apache.usergrid.corepersistence.util.CpNamingUtils;
+import org.apache.usergrid.persistence.*;
+import org.apache.usergrid.persistence.cassandra.CassandraService;
+import org.apache.usergrid.persistence.core.migration.data.DataMigration;
+import org.apache.usergrid.persistence.core.migration.data.ProgressObserver;
+import org.apache.usergrid.persistence.entities.Application;
+import org.apache.usergrid.persistence.entities.Group;
+import static org.apache.usergrid.persistence.Schema.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.UUID;
+
+
+@Singleton
+public class ManagementOrganizationDataMigration implements DataMigration {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(ManagementOrganizationDataMigration.class);
+
+    private final EntityManagerFactory entityManagerFactory;
+    private final ManagementService managementService;
+
+    @Inject
+    public ManagementOrganizationDataMigration(final EntityManagerFactory 
entityManagerFactory, final ManagementService managementService) {
+        this.entityManagerFactory = entityManagerFactory;
+        this.managementService = managementService;
+    }
+
+
+    @Override
+    public int migrate( final int currentVersion, final ProgressObserver 
observer ) {
+
+        final int migrationVersion = getMaxVersion();
+
+        observer.start();
+
+        EntityManager em = 
entityManagerFactory.getEntityManager(CpNamingUtils.MANAGEMENT_APPLICATION_ID);
+
+        UUID managementAppId = entityManagerFactory.getManagementAppId();
+        UUID managementOrgId = entityManagerFactory.getManagementOrgId();
+        String managementAppName = CassandraService.MANAGEMENT_APPLICATION;
+        String managementOrgName = CassandraService.DEFAULT_ORGANIZATION;
+        String managementOrgPlusAppName = 
CassandraService.MANAGEMENT_ORGPLUSAPP;
+        Application app = null;
+
+        // make sure management app exists
+        try {
+            app = em.getApplication();
+            if (app == null) {
+                // create the management application
+                entityManagerFactory.createApplicationV2(managementOrgName, 
managementAppName,
+                        managementAppId, null);
+                app = em.getApplication();
+            } else if (!managementAppName.equals(app.getName())) {
+                logger.info(String.format("Management application name is %s, 
should be %s", app.getName(), managementOrgPlusAppName));
+                observer.update(migrationVersion, String.format("Management 
application name is %s, should be %s", app.getName(), 
managementOrgPlusAppName));
+            }
+        } catch (Exception e) {
+            // should never happen -- abort
+            logger.error("MANAGEMENT APPLICATION ERROR", e);
+            observer.failed(migrationVersion, String.format("MANAGEMENT 
APPLICATION ERROR: %s", e.getMessage()));
+            return currentVersion;
+        }
+
+        // check for existence of management org, and create if necessary
+        boolean createdOrg = false;
+        try {
+            if (!em.isPropertyValueUniqueForEntity(Group.ENTITY_TYPE, 
PROPERTY_PATH, managementOrgName)) {
+                // organization already exists
+                logger.info(String.format("Organization with name %s already 
exists", managementOrgName));
+                observer.update(migrationVersion, String.format("Management 
organization %s already exists", managementOrgName));
+            } else if (!em.isPropertyValueUniqueForEntity(Group.ENTITY_TYPE, 
PROPERTY_UUID, managementOrgId)) {
+                // organization does not have correct UUID
+                logger.error("Organization that has management organization 
UUID does not have correct organization name");
+                observer.failed(migrationVersion, "Organization that has 
management organization UUID does not have correct organization name");
+                return migrationVersion;
+            } else {
+                // create management org
+                Group organizationEntity = new Group();
+                organizationEntity.setPath(managementOrgName);
+                em.create(managementOrgId, Group.ENTITY_TYPE, 
organizationEntity.getProperties());
+                logger.info("Management org created");
+                createdOrg = true;
+            }
+        } catch (Exception e) {
+            // error with management org
+            logger.error("MANAGEMENT ORGANIZATION ERROR", e);
+            observer.update(migrationVersion, String.format("MANAGEMENT 
ORGANIZATION ERROR: %s", e.getMessage()));
+        }
+
+        // add org property to app
+        if (createdOrg && app != null && 
!managementOrgName.equals(app.getProperty("org"))) {
+            try {
+                app.setProperty("org", managementOrgName);
+                em.update(app);
+                logger.info("Management app updated with management org");
+            } catch (Exception e) {
+                // error linking management app to management org
+                logger.error("ERROR ADDING MANAGEMENT ORG TO MANAGEMENT APP", 
e);
+                observer.update(migrationVersion, String.format("ERROR ADDING 
MANAGEMENT ORG TO MANAGEMENT APP: %s", e.getMessage()));
+            }
+        }
+
+        // add connection
+        if (app != null) {
+            if (managementService)
+            Results r = em.getSourceEntities(new 
SimpleEntityRef(CpNamingUtils.APPLICATION_INFO, managementAppId),
+                    ORG_APP_RELATIONSHIP, Group.ENTITY_TYPE, 
Query.Level.ALL_PROPERTIES);
+            Entity entity = r.getEntity();
+            if (entity == null) {
+                // add the connection
+            }
+        }
+
+
+        observer.complete();
+
+        return migrationVersion;
+
+    }
+
+
+    @Override
+    public boolean supports( final int currentVersion ) {
+        return currentVersion == getMaxVersion() - 1;
+    }
+
+
+    @Override
+    public int getMaxVersion() {
+        return 3;
+    }
+}

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
index 55bc49a..b7e90fe 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/corepersistence/util/CpNamingUtils.java
@@ -21,6 +21,7 @@ package org.apache.usergrid.corepersistence.util;
 
 import java.util.UUID;
 
+import org.apache.usergrid.persistence.cassandra.CassandraService;
 import org.apache.usergrid.persistence.core.scope.ApplicationScope;
 import org.apache.usergrid.persistence.core.scope.ApplicationScopeImpl;
 import org.apache.usergrid.persistence.entities.Application;
@@ -65,8 +66,9 @@ public class CpNamingUtils {
      */
     private static final int EDGE_CONN_PREFIX_LENGTH = 
EDGE_CONN_PREFIX.length()+1;
 
-    /** App where we store management info */
+    /** App/org where we store management info */
     public static final UUID MANAGEMENT_APPLICATION_ID = UUID.fromString( 
"b6768a08-b5d5-11e3-a495-11ddb1de66c8" );
+    public static final UUID MANAGEMENT_ORGANIZATION_ID = UUID.fromString( 
"d090d165-7dd8-4132-8aa2-7e0ec5484c7f" );
 
     /**
      * Information about applications is stored in the management app using 
these types
@@ -103,7 +105,7 @@ public class CpNamingUtils {
      * @return
      */
     public static String getConnectionNameFromEdgeName(final String edgeName){
-        return edgeName.substring( EDGE_CONN_PREFIX_LENGTH );
+        return edgeName.substring(EDGE_CONN_PREFIX_LENGTH);
     }
 
     /**
@@ -121,7 +123,7 @@ public class CpNamingUtils {
        * @return
        */
       public static String getCollectionNameFromEdgeName(final String 
edgeName){
-          return edgeName.substring( EDGE_COLL_PREFIX_LENGTH );
+          return edgeName.substring(EDGE_COLL_PREFIX_LENGTH);
       }
 
 
@@ -177,7 +179,7 @@ public class CpNamingUtils {
      * TODO move sourceId to ApplicationScope
      */
     public static Edge createCollectionEdge( final Id sourceId, final String 
collectionName, final Id entityId ) {
-        final String edgeType = CpNamingUtils.getEdgeTypeFromCollectionName( 
collectionName );
+        final String edgeType = 
CpNamingUtils.getEdgeTypeFromCollectionName(collectionName);
 
 
         // create graph edge connection from head entity to member entity
@@ -270,12 +272,22 @@ public class CpNamingUtils {
 
 
     /**
+     * Generate an entity Id from the given UUID
+     *
+     * @param entityId the entity's UUID
+     */
+    protected static Id generateEntityId( UUID entityId ) {
+        return new SimpleId( entityId, Application.ENTITY_TYPE );
+    }
+
+
+    /**
      * Generate an applicationId from the given UUID
      *
      * @param applicationId the applicationId
      */
     public static Id generateApplicationId( UUID applicationId ) {
-        return new SimpleId( applicationId, Application.ENTITY_TYPE );
+        return generateEntityId( applicationId );
     }
 
 
@@ -283,7 +295,15 @@ public class CpNamingUtils {
      * Generate an application scope for the management application
      */
     public static Id getManagementApplicationId() {
-        return generateApplicationId( MANAGEMENT_APPLICATION_ID );
+        return generateEntityId(MANAGEMENT_APPLICATION_ID);
+    }
+
+
+    /**
+     * Generate an id for the management organization
+     */
+    public static Id getManagementOrganizationId() {
+        return generateEntityId(MANAGEMENT_ORGANIZATION_ID);
     }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
 
b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
index bde1bd2..befcc83 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
@@ -166,6 +166,8 @@ public interface EntityManagerFactory {
 
     public UUID getManagementAppId();
 
+    public UUID getManagementOrgId();
+
     public IndexRefreshCommand.IndexRefreshCommandInfo refreshIndex(UUID 
applicationId);
 
     /**

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
----------------------------------------------------------------------
diff --git 
a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
 
b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
index a08c543..85fcd7f 100644
--- 
a/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
+++ 
b/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/CassandraService.java
@@ -79,6 +79,7 @@ public class CassandraService {
     public static final String DEFAULT_APPLICATION = "default-app";
     public static final String DEFAULT_ORGANIZATION = "usergrid";
     public static final String MANAGEMENT_APPLICATION = "management";
+    public static final String MANAGEMENT_ORGPLUSAPP = "usergrid/management";
 
     private static final Logger logger = LoggerFactory.getLogger( 
CassandraService.class );
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
----------------------------------------------------------------------
diff --git 
a/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
 
b/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
index bc22dad..276bad8 100644
--- 
a/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
+++ 
b/stack/services/src/main/java/org/apache/usergrid/management/OrganizationConfig.java
@@ -69,6 +69,11 @@ public class OrganizationConfig {
     private OrganizationConfig() {
     }
 
+    public OrganizationConfig(OrganizationConfigProps configFileProperties) {
+        setDefaultProperties(configFileProperties);
+        // will add id and name once default org exists
+    }
+
     public OrganizationConfig(OrganizationConfigProps configFileProperties, 
UUID id, String name) {
         setDefaultProperties(configFileProperties);
         this.id = id;

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
 
b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 329f0d2..198798b 100644
--- 
a/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
+++ 
b/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
@@ -3214,12 +3214,10 @@ public class ManagementServiceImpl implements 
ManagementService {
         if ( entity != null ) {
             Map entityProperties = em.getDictionaryAsMap(entity, 
ORGANIZATION_CONFIG_DICTIONARY);
             return new OrganizationConfig(orgConfigProperties, 
entity.getUuid(), entity.getName(), entityProperties);
-        } else {
-            // return the defaults
-            return new OrganizationConfig(orgConfigProperties)
         }
 
-        return null;
+        // return the defaults
+        return new OrganizationConfig(orgConfigProperties);
     }
 
 

http://git-wip-us.apache.org/repos/asf/usergrid/blob/a5185f2e/stack/services/src/test/java/org/apache/usergrid/corepersistence/migration/AppInfoMigrationPluginTest.java
----------------------------------------------------------------------
diff --git 
a/stack/services/src/test/java/org/apache/usergrid/corepersistence/migration/AppInfoMigrationPluginTest.java
 
b/stack/services/src/test/java/org/apache/usergrid/corepersistence/migration/AppInfoMigrationPluginTest.java
index ef97188..cad9cca 100644
--- 
a/stack/services/src/test/java/org/apache/usergrid/corepersistence/migration/AppInfoMigrationPluginTest.java
+++ 
b/stack/services/src/test/java/org/apache/usergrid/corepersistence/migration/AppInfoMigrationPluginTest.java
@@ -120,7 +120,7 @@ public class AppInfoMigrationPluginTest {
         List<Entity> deletedApps = new ArrayList<>();
 
         setup.getEmf().initializeApplicationV2(
-            CassandraService.DEFAULT_ORGANIZATION, 
AppInfoMigrationPlugin.SYSTEM_APP_ID, "systemapp", null);
+            CassandraService.DEFAULT_ORGANIZATION, 
AppInfoMigrationPlugin.SYSTEM_APP_ID, CassandraService.MANAGEMENT_APPLICATION, 
null);
 
         EntityManager systemAppEm = setup.getEmf().getEntityManager( 
AppInfoMigrationPlugin.SYSTEM_APP_ID );
 

Reply via email to