You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by sn...@apache.org on 2015/03/30 21:58:34 UTC
[30/50] incubator-usergrid git commit: Merge branch 'USERGRID-405'
into USERGRID-448-appinfofix
Merge branch 'USERGRID-405' into USERGRID-448-appinfofix
Conflicts:
stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/c8fcf2de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/c8fcf2de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/c8fcf2de
Branch: refs/heads/two-dot-o-dev
Commit: c8fcf2de9cd3fe3fdbf4b480a4420062ee88d44b
Parents: 7d7c54b f1bf035
Author: Dave Johnson <dm...@apigee.com>
Authored: Thu Mar 19 17:10:00 2015 -0400
Committer: Dave Johnson <dm...@apigee.com>
Committed: Thu Mar 19 17:10:00 2015 -0400
----------------------------------------------------------------------
.../main/dist/init_instance/init_rest_server.sh | 2 +
.../dist/init_instance/install_elasticsearch.sh | 22 +-
.../main/groovy/configure_elasticsearch.groovy | 80 ++--
.../src/main/groovy/configure_usergrid.groovy | 12 +-
stack/awscluster/ugcluster-cf.json | 466 +++++++++++++------
stack/core/pom.xml | 10 -
.../batch/service/JobSchedulerService.java | 5 -
.../usergrid/corepersistence/CoreModule.java | 20 +-
.../corepersistence/CpEntityManager.java | 64 ++-
.../corepersistence/CpEntityManagerFactory.java | 5 -
.../corepersistence/CpRelationManager.java | 21 +-
.../events/EntityDeletedHandler.java | 58 ++-
.../events/EntityVersionCreatedHandler.java | 60 ++-
.../events/EntityVersionDeletedHandler.java | 55 ++-
.../results/FilteringLoader.java | 52 ++-
.../usergrid/persistence/EntityManager.java | 10 +-
.../persistence/EntityManagerFactory.java | 2 -
.../cassandra/EntityManagerFactoryImpl.java | 3 -
.../cassandra/EntityManagerImpl.java | 31 +-
.../cassandra/RelationManagerImpl.java | 58 +--
.../cassandra/index/ConnectedIndexScanner.java | 2 -
.../cassandra/index/IndexBucketScanner.java | 2 -
.../corepersistence/StaleIndexCleanupTest.java | 86 +++-
.../usergrid/persistence/EntityManagerIT.java | 1 +
.../PerformanceEntityRebuildIndexTest.java | 2 +
.../collection/EntityCollectionManager.java | 14 +-
.../collection/EntityDeletedFactory.java | 34 --
.../collection/EntityVersionCleanupFactory.java | 35 --
.../collection/EntityVersionCreatedFactory.java | 31 --
.../persistence/collection/FieldSet.java | 48 ++
.../cache/CachedEntityCollectionManager.java | 11 +-
.../collection/guice/CollectionModule.java | 11 +-
.../EntityCollectionManagerFactoryImpl.java | 30 +-
.../impl/EntityCollectionManagerImpl.java | 240 ++++++++--
.../collection/impl/EntityDeletedTask.java | 9 +-
.../impl/EntityVersionCleanupTask.java | 39 +-
.../impl/EntityVersionTaskFactory.java | 65 +++
.../mvcc/stage/write/WriteUniqueVerify.java | 140 +++---
.../UniqueValueSerializationStrategy.java | 12 +
.../serialization/impl/MutableFieldSet.java | 63 +++
.../MvccEntitySerializationStrategyV1Impl.java | 2 +-
.../MvccEntitySerializationStrategyV3Impl.java | 1 -
.../UniqueValueSerializationStrategyImpl.java | 27 +-
.../migration/MvccEntityDataMigrationImpl.java | 8 +-
.../collection/util/EntityUtils.java | 4 +-
.../collection/EntityCollectionManagerIT.java | 68 +++
.../impl/EntityVersionCleanupTaskTest.java | 13 +-
.../mvcc/stage/write/WriteUniqueVerifyTest.java | 6 +-
...ntitySerializationStrategyProxyV1_3Test.java | 3 +
...ntitySerializationStrategyProxyV2_3Test.java | 3 +
...ccEntitySerializationStrategyV1ImplTest.java | 2 +
.../core/astyanax/CassandraConfig.java | 6 +
.../core/astyanax/CassandraConfigImpl.java | 8 +-
.../persistence/core/astyanax/CassandraFig.java | 9 +-
.../core/astyanax/MultiRowColumnIterator.java | 12 +-
.../persistence/core/future/BetterFuture.java | 43 +-
.../core/hystrix/HystrixCassandra.java | 94 ----
.../core/metrics/MetricsFactory.java | 9 +
.../core/metrics/MetricsFactoryImpl.java | 121 +++--
.../persistence/core/task/TaskExecutor.java | 4 +-
.../core/astyanax/ColumnNameIteratorTest.java | 7 +-
.../MultiKeyColumnNameIteratorTest.java | 7 +-
.../astyanax/MultiRowColumnIteratorTest.java | 7 +-
stack/corepersistence/graph/pom.xml | 28 +-
.../graph/impl/GraphManagerImpl.java | 310 ++++++++++--
.../graph/impl/stage/EdgeDeleteRepairImpl.java | 9 +-
.../graph/impl/stage/EdgeMetaRepairImpl.java | 16 +-
.../impl/stage/NodeDeleteListenerImpl.java | 16 +-
.../impl/GraphManagerFactoryImpl.java | 17 +-
.../impl/NodeSerializationImpl.java | 36 +-
.../shard/count/NodeShardApproximationImpl.java | 4 +-
.../NodeShardCounterSerializationImpl.java | 25 +-
.../shard/impl/NodeShardAllocationImpl.java | 16 +-
.../shard/impl/ShardGroupCompactionImpl.java | 64 +--
.../usergrid/persistence/map/MapManager.java | 14 +-
.../persistence/map/impl/MapManagerImpl.java | 8 +
.../persistence/map/impl/MapSerialization.java | 9 +
.../map/impl/MapSerializationImpl.java | 93 ++++
.../persistence/map/MapManagerTest.java | 49 +-
stack/corepersistence/queryindex/pom.xml | 17 +-
.../usergrid/persistence/index/EntityIndex.java | 26 +-
.../persistence/index/IndexBufferConsumer.java | 11 +
.../persistence/index/IndexBufferProducer.java | 1 -
.../usergrid/persistence/index/IndexFig.java | 73 ++-
.../index/IndexOperationMessage.java | 115 ++++-
.../persistence/index/guice/IndexModule.java | 7 +
.../persistence/index/guice/QueueProvider.java | 116 +++++
.../persistence/index/impl/BatchRequest.java | 41 ++
.../persistence/index/impl/BufferQueue.java | 68 +++
.../index/impl/BufferQueueInMemoryImpl.java | 108 +++++
.../index/impl/BufferQueueSQSImpl.java | 307 ++++++++++++
.../persistence/index/impl/DeIndexRequest.java | 115 +++++
.../index/impl/EsEntityIndexBatchImpl.java | 64 ++-
.../index/impl/EsEntityIndexImpl.java | 349 +++++---------
.../index/impl/EsIndexBufferConsumerImpl.java | 286 ++++++++----
.../index/impl/EsIndexBufferProducerImpl.java | 16 +-
.../persistence/index/impl/EsIndexCache.java | 138 +++---
.../persistence/index/impl/IndexRequest.java | 125 +++++
.../persistence/index/impl/IndexingUtils.java | 109 +++--
.../index/guice/TestIndexModule.java | 3 +-
.../index/impl/BufferQueueSQSImplTest.java | 169 +++++++
.../impl/EntityConnectionIndexImplTest.java | 5 +-
.../persistence/index/impl/EntityIndexTest.java | 58 +--
.../persistence/index/impl/EsTestUtils.java | 48 --
.../persistence/queue/QueueManager.java | 4 +-
.../usergrid/persistence/queue/QueueScope.java | 2 +-
.../persistence/queue/QueueScopeFactory.java | 34 --
.../persistence/queue/guice/QueueModule.java | 17 +-
.../queue/impl/QueueScopeFactoryImpl.java | 48 --
.../persistence/queue/impl/QueueScopeImpl.java | 27 +-
.../queue/impl/SQSQueueManagerImpl.java | 214 +++++----
.../persistence/queue/NoAWSCredsRule.java | 98 ++++
.../persistence/queue/QueueManagerTest.java | 29 +-
stack/pom.xml | 49 +-
stack/rest/pom.xml | 4 -
.../org/apache/usergrid/rest/RootResource.java | 6 -
.../applications/ApplicationsResource.java | 6 -
stack/services/pom.xml | 13 +-
.../cassandra/ManagementServiceImpl.java | 9 +-
.../services/AbstractCollectionService.java | 40 +-
.../services/AbstractConnectionsService.java | 39 +-
.../notifications/NotificationsService.java | 50 +-
.../services/notifications/QueueListener.java | 5 +-
.../usergrid/services/queues/QueueListener.java | 5 +-
.../notifications/NotifiersServiceIT.java | 6 +
stack/test-utils/pom.xml | 5 -
126 files changed, 4188 insertions(+), 1986 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/batch/service/JobSchedulerService.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
index adbc499,2e9b780..b62cdf8
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CoreModule.java
@@@ -117,7 -117,7 +118,6 @@@ public class CoreModule extends Abstra
/**
* Create our migrations for within our core plugin
-- *
*/
Multibinder<DataMigration<EntityIdScope>> dataMigrationMultibinder =
Multibinder.newSetBinder( binder(), new TypeLiteral<DataMigration<EntityIdScope>>() {}, CoreMigration.class );
@@@ -129,14 -129,13 +129,10 @@@
//wire up the collection migration plugin
final Multibinder<MigrationPlugin> plugins = Multibinder.newSetBinder( binder(), MigrationPlugin.class );
plugins.addBinding().to( CoreMigrationPlugin.class );
- plugins.addBinding().to(MigrationModuleVersionPlugin.class );
+ plugins.addBinding().to( AppInfoMigrationPlugin.class );
+ plugins.addBinding().to( MigrationModuleVersionPlugin.class );
bind( AllApplicationsObservable.class).to(AllApplicationsObservableImpl.class);
--
--
--
--
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
----------------------------------------------------------------------
diff --cc stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
index efae477,f76b9fc..3b47fa2
--- a/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
+++ b/stack/core/src/main/java/org/apache/usergrid/corepersistence/CpEntityManagerFactory.java
@@@ -15,18 -15,32 +15,16 @@@
*/
package org.apache.usergrid.corepersistence;
- import com.google.common.base.Optional;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.TypeLiteral;
- import com.yammer.metrics.annotation.Metered;
import org.apache.commons.lang.StringUtils;
-
import org.apache.usergrid.corepersistence.util.CpNamingUtils;
-import org.apache.usergrid.persistence.AbstractEntity;
-import org.apache.usergrid.persistence.Entity;
-import org.apache.usergrid.persistence.EntityFactory;
-import org.apache.usergrid.persistence.EntityManager;
-import org.apache.usergrid.persistence.EntityManagerFactory;
-import org.apache.usergrid.persistence.EntityRef;
-import org.apache.usergrid.persistence.Results;
+import org.apache.usergrid.exception.ConflictException;
+import org.apache.usergrid.persistence.*;
import org.apache.usergrid.persistence.cassandra.CassandraService;
import org.apache.usergrid.persistence.cassandra.CounterUtils;
import org.apache.usergrid.persistence.cassandra.Setup;
@@@ -391,9 -412,8 +389,8 @@@ public class CpEntityManagerFactory imp
@Override
- @Metered(group = "core", name = "EntityManagerFactory_getApplication")
public Map<String, UUID> getApplications() throws Exception {
- return getApplications( false );
+ return getApplications(false);
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/persistence/EntityManagerFactory.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/main/java/org/apache/usergrid/persistence/cassandra/EntityManagerFactoryImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/test/java/org/apache/usergrid/persistence/EntityManagerIT.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/core/src/test/java/org/apache/usergrid/persistence/PerformanceEntityRebuildIndexTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
----------------------------------------------------------------------
diff --cc stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
index 88f02ab,8814583..e2d09b3
--- a/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
+++ b/stack/corepersistence/queryindex/src/main/java/org/apache/usergrid/persistence/index/impl/EsEntityIndexImpl.java
@@@ -663,114 -649,8 +649,6 @@@ public class EsEntityIndexImpl implemen
return parseResults(searchResponse, new Query());
}
-
- @Override
- public ListenableActionFuture deleteAllVersionsOfEntity(final Id entityId ) {
-
- String idString = IndexingUtils.idString(entityId).toLowerCase();
-
- final TermQueryBuilder tqb = QueryBuilders.termQuery(ENTITYID_ID_FIELDNAME, idString);
-
- //Added For Graphite Metrics
- final Timer.Context timeDeleteAllVersions =allVersionsTimer.time();
- final Timer.Context timeDeleteAllVersionsFuture = allVersionsTimerFuture.time();
- final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient()
- .prepareDeleteByQuery( alias.getWriteAlias() ).setQuery( tqb ).execute();
-
- response.addListener( new ActionListener<DeleteByQueryResponse>() {
-
- @Override
- public void onResponse( DeleteByQueryResponse response) {
- timeDeleteAllVersions.stop();
- logger.debug( "Deleted entity {}:{} from all index scopes with response status = {}",
- entityId.getType(), entityId.getUuid(), response.status().toString() );
-
- checkDeleteByQueryResponse(tqb, response);
- }
-
-
- @Override
- public void onFailure( Throwable e ) {
- timeDeleteAllVersions.stop();
- logger.error( "Failed to delete entity {}:{} from all index scopes with error {}",
- entityId.getType(), entityId.getUuid(), e);
-
-
- }
- });
- timeDeleteAllVersionsFuture.stop();
- return response;
- }
-
-
- @Override
- public ListenableActionFuture deletePreviousVersions(final Id entityId, final UUID version) {
-
- String idString = IndexingUtils.idString( entityId ).toLowerCase();
-
- final FilteredQueryBuilder fqb = QueryBuilders.filteredQuery(
- QueryBuilders.termQuery(ENTITYID_ID_FIELDNAME, idString),
- FilterBuilders.rangeFilter(ENTITY_VERSION_FIELDNAME).lt(version.timestamp())
- );
-
- //Added For Graphite Metrics
- //Checks the time from the execute to the response below
- final Timer.Context timeDeletePreviousVersions = deletePreviousTimer.time();
- final Timer.Context timeDeletePreviousVersionFuture = deletePreviousTimerFuture.time();
- final ListenableActionFuture<DeleteByQueryResponse> response = esProvider.getClient()
- .prepareDeleteByQuery(alias.getWriteAlias()).setQuery(fqb).execute();
-
- //Added For Graphite Metrics
- response.addListener(new ActionListener<DeleteByQueryResponse>() {
- @Override
- public void onResponse(DeleteByQueryResponse response) {
- timeDeletePreviousVersions.stop();
- //error message needs to be retooled so that it describes the entity more throughly
- logger
- .debug("Deleted entity {}:{} with version {} from all " + "index scopes with response status = {}",
- entityId.getType(), entityId.getUuid(), version, response.status().toString());
-
- checkDeleteByQueryResponse( fqb, response );
- }
-
-
- @Override
- public void onFailure( Throwable e ) {
- logger.error( "Deleted entity {}:{} from all index scopes with error {}", entityId.getType(),
- entityId.getUuid(), e );
- }
- } );
-
- timeDeletePreviousVersionFuture.stop();
-
- return response;
- }
-
-
- /**
- * Validate the response doesn't contain errors, if it does, fail fast at the first error we encounter
- */
- private void checkDeleteByQueryResponse(
- final QueryBuilder query, final DeleteByQueryResponse response ) {
-
- for ( IndexDeleteByQueryResponse indexDeleteByQueryResponse : response ) {
- final ShardOperationFailedException[] failures = indexDeleteByQueryResponse.getFailures();
-
- for ( ShardOperationFailedException failedException : failures ) {
- logger.error( String.format("Unable to delete by query %s. "
- + "Failed with code %d and reason %s on shard %s in index %s",
- query.toString(),
- failedException.status().getStatus(),
- failedException.reason(),
- failedException.shardId(),
- failedException.index() )
- );
- }
-
- }
- }
--
--
/**
* Completely delete an index.
*/
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/rest/src/main/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsResource.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/c8fcf2de/stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
----------------------------------------------------------------------
diff --cc stack/services/src/main/java/org/apache/usergrid/management/cassandra/ManagementServiceImpl.java
index 43617c4,854c3e0..16bb703
--- 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
@@@ -1606,98 -1636,40 +1605,98 @@@ public class ManagementServiceImpl impl
}
if ( properties == null ) {
- properties = new HashMap<String, Object>();
+ properties = new HashMap<>();
}
+ EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
+
OrganizationInfo organizationInfo = getOrganizationByUuid( organizationId );
+ Entity appInfo = emf.createApplicationV2(
+ organizationInfo.getName(), applicationName, properties);
+ em.refreshIndex();
- UUID applicationId = emf.createApplication( organizationInfo.getName(), applicationName, properties );
+ writeUserToken( smf.getManagementAppId(), appInfo,
+ encryptionService.plainTextCredentials(
+ generateOAuthSecretKey( AuthPrincipalType.APPLICATION ),
+ null,
+ smf.getManagementAppId() ) );
- EntityManager em = emf.getEntityManager( smf.getManagementAppId() );
- properties.put( "name", buildAppName( applicationName, organizationInfo ) );
- properties.put( "appUuid", applicationId );
- Entity appInfo = em.create( applicationId, APPLICATION_INFO, properties );
+ UUID applicationId = addApplicationToOrganization( organizationId, appInfo );
+ UserInfo user = null;
+ try {
+ user = SubjectUtils.getUser();
+ }
+ catch ( UnavailableSecurityManagerException e ) {
+ // occurs in the rare case that this is called before the full stack is initialized
+ logger.warn("Error getting user, application created activity will not be created", e);
+ }
+ if ( ( user != null ) && user.isAdminUser() ) {
+ postOrganizationActivity( organizationId, user, "create", appInfo, "Application", applicationName,
+ "<a href=\"mailto:" + user.getEmail() + "\">" + user.getName() + " (" + user.getEmail()
+ + ")</a> created a new application named " + applicationName, null );
+ }
- em.refreshIndex();
+
- writeUserToken( smf.getManagementAppId(), appInfo, encryptionService
- .plainTextCredentials( generateOAuthSecretKey( AuthPrincipalType.APPLICATION ), null,
- smf.getManagementAppId() ) );
- addApplicationToOrganization( organizationId, applicationId, appInfo );
+
+ return new ApplicationInfo( applicationId, appInfo.getName() );
+ }
+
+
+ @Override
+ public void deleteApplication(UUID applicationId) throws Exception {
+ emf.deleteApplication( applicationId );
+ }
+
+
+ @Override
+ public ApplicationInfo restoreApplication(UUID applicationId) throws Exception {
+
+ ApplicationInfo app = getDeletedApplicationInfo( applicationId );
+ if ( app == null ) {
+ throw new EntityNotFoundException("Deleted application ID " + applicationId + " not found");
+ }
+
+ if ( emf.lookupApplication( app.getName() ) != null ) {
+ throw new ConflictException("Cannot restore application, one with that name already exists.");
+ }
+
+ // restore application_info entity
+
+ EntityManager em = emf.getEntityManager( emf.getManagementAppId() );
+ Entity appInfo = emf.restoreApplication(applicationId);
+
+ // restore token
+
+ writeUserToken( smf.getManagementAppId(), appInfo,
+ encryptionService.plainTextCredentials(
+ generateOAuthSecretKey( AuthPrincipalType.APPLICATION ),
+ null,
+ smf.getManagementAppId() ) );
+
+ String orgName = appInfo.getName().split("/")[0];
+ EntityRef alias = em.getAlias( Group.ENTITY_TYPE, orgName );
+ Entity orgEntity = em.get( alias );
+
+ addApplicationToOrganization( orgEntity.getUuid(), appInfo );
+
+ // create activity
UserInfo user = null;
- // if we call this method before the full stack is initialized
- // we'll get an exception
try {
user = SubjectUtils.getUser();
}
catch ( UnavailableSecurityManagerException e ) {
+ // occurs in the rare case that this is called before the full stack is initialized
+ logger.warn("Error getting user, application restored created activity will not be created", e);
}
if ( ( user != null ) && user.isAdminUser() ) {
- postOrganizationActivity( organizationId, user, "create", appInfo, "Application", applicationName,
- "<a href=\"mailto:" + user.getEmail() + "\">" + user.getName() + " (" + user.getEmail()
- + ")</a> created a new application named " + applicationName, null );
+ postOrganizationActivity( orgEntity.getUuid(), user, "restore", appInfo, "Application", appInfo.getName(),
+ "<a href=\"mailto:" + user.getEmail() + "\">" + user.getName() + " (" + user.getEmail()
+ + ")</a> restored an application named " + appInfo.getName(), null );
}
- em.refreshIndex();
+
return new ApplicationInfo( applicationId, appInfo.getName() );
}