managerProvider;
+
+ /**
+ * Translated query should look like:
+ *
+ *
+ * SELECT recipe.ID,
+ * recipe.CREATOR,
+ * recipe.DESCRIPTION,
+ * recipe.NAME,
+ * recipe.SCRIPT,
+ * recipe.TYPE
+ * FROM RECIPEPERMISSIONS permission
+ * LEFT OUTER JOIN RECIPE recipe ON (recipe.ID = permission.RECIPEID)
+ * LEFT OUTER JOIN Recipe_TAGS tag ON (tag.Recipe_ID = recipe.ID),
+ * RECIPEPERMISSIONS_ACTIONS permissionActions
+ * WHERE ((tag.tag IN (?))
+ * AND ((? IS NULL)
+ * OR (recipe.TYPE = ?))
+ * AND ((permission.USERID IS NULL)
+ * OR (permission.USERID = ?))
+ * AND (permissionActions.actions = ?)
+ * AND (permissionActions.RECIPEPERMISSIONS_ID = permission.ID))
+ * GROUP BY recipe.ID
+ * HAVING (COUNT(tag.tag) = ?)
+ *
+ */
+ @Override
+ @Transactional
+ public List search(
+ String userId, List tags, String type, int skipCount, int maxItems)
+ throws ServerException {
+ try {
+ final EntityManager em = managerProvider.get();
+ final CriteriaBuilder cb = em.getCriteriaBuilder();
+ final CriteriaQuery query = cb.createQuery(RecipeImpl.class);
+ final Root perm = query.from(RecipePermissionsImpl.class);
+ final Join rwp = perm.join("recipe", JoinType.LEFT);
+ final Expression> acts = perm.get("actions");
+ final ParameterExpression typeParam = cb.parameter(String.class, "recipeType");
+ final Predicate checkType = cb.or(cb.isNull(typeParam), cb.equal(rwp.get("type"), typeParam));
+ final Predicate userIdCheck =
+ cb.or(
+ cb.isNull(perm.get("userId")),
+ cb.equal(perm.get("userId"), cb.parameter(String.class, "userId")));
+ final Predicate searchActionCheck =
+ cb.isMember(cb.parameter(String.class, "actionParam"), acts);
+ final Predicate shareCheck = cb.and(checkType, userIdCheck, searchActionCheck);
+ final TypedQuery typedQuery;
+ if (tags != null && !tags.isEmpty()) {
+ final Join tag = rwp.join("tags", JoinType.LEFT);
+ query
+ .select(cb.construct(RecipeImpl.class, rwp))
+ .where(cb.and(tag.in(tags), shareCheck))
+ .groupBy(rwp.get("id"))
+ .having(cb.equal(cb.count(tag), tags.size()));
+ typedQuery = em.createQuery(query).setParameter("tags", tags);
+ } else {
+ typedQuery =
+ em.createQuery(query.select(cb.construct(RecipeImpl.class, rwp)).where(shareCheck));
+ }
+ return typedQuery
+ .setParameter("userId", userId)
+ .setParameter("recipeType", type)
+ .setParameter("actionParam", "search")
+ .setFirstResult(skipCount)
+ .setMaxResults(maxItems)
+ .getResultList();
+ } catch (RuntimeException ex) {
+ throw new ServerException(ex.getLocalizedMessage(), ex);
+ }
+ }
+}
diff --git a/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/jpa/MultiuserMachineJpaModule.java b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/jpa/MultiuserMachineJpaModule.java
new file mode 100644
index 0000000000..981daf1e03
--- /dev/null
+++ b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/jpa/MultiuserMachineJpaModule.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2012-2017 Red Hat, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.che.multiuser.permission.machine.jpa;
+
+import com.google.inject.AbstractModule;
+import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.Multibinder;
+import org.eclipse.che.api.machine.server.jpa.JpaSnapshotDao;
+import org.eclipse.che.api.machine.server.spi.RecipeDao;
+import org.eclipse.che.api.machine.server.spi.SnapshotDao;
+import org.eclipse.che.multiuser.api.permission.server.AbstractPermissionsDomain;
+import org.eclipse.che.multiuser.api.permission.server.model.impl.AbstractPermissions;
+import org.eclipse.che.multiuser.api.permission.server.spi.PermissionsDao;
+import org.eclipse.che.multiuser.permission.machine.jpa.listener.RemoveRecipeOnLastUserRemovedEventSubscriber;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipeDomain;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
+
+/** @author Yevhenii Voevodin */
+public class MultiuserMachineJpaModule extends AbstractModule {
+
+ @Override
+ protected void configure() {
+ bind(RecipeDao.class).to(MultiuserJpaRecipeDao.class);
+ bind(SnapshotDao.class).to(JpaSnapshotDao.class);
+ bind(new TypeLiteral>() {})
+ .to(RecipeDomain.class);
+
+ final Multibinder> daos =
+ Multibinder.newSetBinder(
+ binder(), new TypeLiteral>() {});
+ daos.addBinding().to(JpaRecipePermissionsDao.class);
+
+ bind(new TypeLiteral>() {})
+ .to(RecipeDomain.class);
+ bind(JpaRecipePermissionsDao.RemovePermissionsBeforeRecipeRemovedEventSubscriber.class)
+ .asEagerSingleton();
+ bind(RemoveRecipeOnLastUserRemovedEventSubscriber.class).asEagerSingleton();
+ }
+}
diff --git a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/jpa/listener/RemoveRecipeOnLastUserRemovedEventSubscriber.java b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/jpa/listener/RemoveRecipeOnLastUserRemovedEventSubscriber.java
similarity index 81%
rename from wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/jpa/listener/RemoveRecipeOnLastUserRemovedEventSubscriber.java
rename to multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/jpa/listener/RemoveRecipeOnLastUserRemovedEventSubscriber.java
index ff58a586c4..15740421bc 100644
--- a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/jpa/listener/RemoveRecipeOnLastUserRemovedEventSubscriber.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/jpa/listener/RemoveRecipeOnLastUserRemovedEventSubscriber.java
@@ -8,15 +8,15 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.jpa.listener;
+package org.eclipse.che.multiuser.permission.machine.jpa.listener;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.ServerException;
import org.eclipse.che.api.machine.server.jpa.JpaRecipeDao;
-import org.eclipse.che.api.machine.server.jpa.JpaRecipePermissionsDao;
-import org.eclipse.che.api.permission.server.jpa.listener.RemovePermissionsOnLastUserRemovedEventSubscriber;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
+import org.eclipse.che.multiuser.api.permission.server.jpa.listener.RemovePermissionsOnLastUserRemovedEventSubscriber;
+import org.eclipse.che.multiuser.permission.machine.jpa.JpaRecipePermissionsDao;
/**
* Listens for {@link UserImpl} removal events, and checks if the removing user is the last who have
diff --git a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipeCreatorPermissionsProvider.java b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeCreatorPermissionsProvider.java
similarity index 93%
rename from wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipeCreatorPermissionsProvider.java
rename to multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeCreatorPermissionsProvider.java
index b632997298..5b010855c7 100644
--- a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipeCreatorPermissionsProvider.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeCreatorPermissionsProvider.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.recipe;
+package org.eclipse.che.multiuser.permission.machine.recipe;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
@@ -16,10 +16,10 @@ import javax.inject.Inject;
import javax.inject.Singleton;
import org.eclipse.che.api.core.notification.EventService;
import org.eclipse.che.api.machine.server.event.RecipePersistedEvent;
-import org.eclipse.che.api.permission.server.PermissionsManager;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.subject.Subject;
import org.eclipse.che.core.db.cascade.CascadeEventSubscriber;
+import org.eclipse.che.multiuser.api.permission.server.PermissionsManager;
/**
* Adds recipe permissions for current subject, if there is no subject present in {@link
diff --git a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipeDomain.java b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeDomain.java
similarity index 90%
rename from wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipeDomain.java
rename to multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeDomain.java
index 0f3a5bb5b8..3ca8ccbccd 100644
--- a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipeDomain.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeDomain.java
@@ -8,11 +8,11 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.recipe;
+package org.eclipse.che.multiuser.permission.machine.recipe;
import com.google.common.collect.ImmutableList;
import java.util.List;
-import org.eclipse.che.api.permission.server.AbstractPermissionsDomain;
+import org.eclipse.che.multiuser.api.permission.server.AbstractPermissionsDomain;
/**
* Domain for storing recipes' permissions
diff --git a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipePermissionsImpl.java b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipePermissionsImpl.java
similarity index 92%
rename from wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipePermissionsImpl.java
rename to multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipePermissionsImpl.java
index 9e2f7c63a6..f5d2ed4230 100644
--- a/wsmaster/che-core-api-machine/src/main/java/org/eclipse/che/api/machine/server/recipe/RecipePermissionsImpl.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/main/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipePermissionsImpl.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.recipe;
+package org.eclipse.che.multiuser.permission.machine.recipe;
import java.util.ArrayList;
import java.util.List;
@@ -22,8 +22,9 @@ import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
-import org.eclipse.che.api.permission.server.model.impl.AbstractPermissions;
-import org.eclipse.che.api.permission.shared.model.Permissions;
+import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
+import org.eclipse.che.multiuser.api.permission.server.model.impl.AbstractPermissions;
+import org.eclipse.che.multiuser.api.permission.shared.model.Permissions;
/**
* Recipe permissions data object.
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/filters/RecipePermissionsFilterTest.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/filters/RecipePermissionsFilterTest.java
similarity index 96%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/filters/RecipePermissionsFilterTest.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/filters/RecipePermissionsFilterTest.java
index 7c0d2b42bd..8297f92329 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/filters/RecipePermissionsFilterTest.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/filters/RecipePermissionsFilterTest.java
@@ -8,12 +8,12 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.filters;
+package org.eclipse.che.multiuser.permission.machine.filters;
import static com.jayway.restassured.RestAssured.given;
-import static org.eclipse.che.api.machine.server.recipe.RecipeDomain.DELETE;
-import static org.eclipse.che.api.machine.server.recipe.RecipeDomain.READ;
-import static org.eclipse.che.api.machine.server.recipe.RecipeDomain.UPDATE;
+import static org.eclipse.che.multiuser.permission.machine.recipe.RecipeDomain.DELETE;
+import static org.eclipse.che.multiuser.permission.machine.recipe.RecipeDomain.READ;
+import static org.eclipse.che.multiuser.permission.machine.recipe.RecipeDomain.UPDATE;
import static org.everrest.assured.JettyHttpServer.ADMIN_USER_NAME;
import static org.everrest.assured.JettyHttpServer.ADMIN_USER_PASSWORD;
import static org.everrest.assured.JettyHttpServer.SECURE_PATH;
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaRecipePermissionsDaoTest.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaRecipePermissionsDaoTest.java
similarity index 97%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaRecipePermissionsDaoTest.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaRecipePermissionsDaoTest.java
index 1bd551ba86..e6a0245a28 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaRecipePermissionsDaoTest.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaRecipePermissionsDaoTest.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.jpa;
+package org.eclipse.che.multiuser.permission.machine.jpa;
import static java.util.Arrays.asList;
import static org.testng.Assert.assertTrue;
@@ -19,9 +19,9 @@ import com.google.inject.Injector;
import java.util.List;
import javax.persistence.EntityManager;
import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
-import org.eclipse.che.api.machine.server.recipe.RecipePermissionsImpl;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.commons.test.db.H2TestHelper;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
@@ -59,7 +59,7 @@ public class JpaRecipePermissionsDaoTest {
new RecipeImpl("recipe2", "rc2", null, null, null, null, null)
};
- Injector injector = Guice.createInjector(new JpaTestModule(), new MachineJpaModule());
+ Injector injector = Guice.createInjector(new JpaTestModule(), new MultiuserMachineJpaModule());
manager = injector.getInstance(EntityManager.class);
dao = injector.getInstance(JpaRecipePermissionsDao.class);
}
diff --git a/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaTckModule.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaTckModule.java
new file mode 100644
index 0000000000..cdd47cae84
--- /dev/null
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaTckModule.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2012-2017 Red Hat, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.che.multiuser.permission.machine.jpa;
+
+import com.google.inject.TypeLiteral;
+import java.util.Collection;
+import java.util.stream.Collectors;
+import org.eclipse.che.account.spi.AccountImpl;
+import org.eclipse.che.api.core.model.workspace.Workspace;
+import org.eclipse.che.api.machine.server.jpa.JpaSnapshotDao;
+import org.eclipse.che.api.machine.server.model.impl.SnapshotImpl;
+import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
+import org.eclipse.che.api.machine.server.spi.RecipeDao;
+import org.eclipse.che.api.machine.server.spi.SnapshotDao;
+import org.eclipse.che.api.user.server.model.impl.UserImpl;
+import org.eclipse.che.commons.test.db.H2DBTestServer;
+import org.eclipse.che.commons.test.db.H2JpaCleaner;
+import org.eclipse.che.commons.test.db.PersistTestModuleBuilder;
+import org.eclipse.che.commons.test.tck.TckModule;
+import org.eclipse.che.commons.test.tck.TckResourcesCleaner;
+import org.eclipse.che.commons.test.tck.repository.JpaTckRepository;
+import org.eclipse.che.commons.test.tck.repository.TckRepository;
+import org.eclipse.che.commons.test.tck.repository.TckRepositoryException;
+import org.eclipse.che.core.db.DBInitializer;
+import org.eclipse.che.core.db.h2.jpa.eclipselink.H2ExceptionHandler;
+import org.eclipse.che.core.db.schema.SchemaInitializer;
+import org.eclipse.che.core.db.schema.impl.flyway.FlywaySchemaInitializer;
+import org.eclipse.che.multiuser.api.permission.server.AbstractPermissionsDomain;
+import org.eclipse.che.multiuser.api.permission.server.model.impl.AbstractPermissions;
+import org.eclipse.che.multiuser.api.permission.server.spi.PermissionsDao;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
+import org.eclipse.che.multiuser.permission.machine.spi.tck.RecipePermissionsDaoTest;
+import org.h2.Driver;
+
+/** @author Anton Korneta */
+public class JpaTckModule extends TckModule {
+
+ @Override
+ protected void configure() {
+ H2DBTestServer server = H2DBTestServer.startDefault();
+ install(
+ new PersistTestModuleBuilder()
+ .setDriver(Driver.class)
+ .runningOn(server)
+ .addEntityClasses(
+ UserImpl.class,
+ RecipeImpl.class,
+ SnapshotImpl.class,
+ AccountImpl.class,
+ AbstractPermissions.class,
+ RecipePermissionsImpl.class,
+ TestWorkspaceEntity.class)
+ .setExceptionHandler(H2ExceptionHandler.class)
+ .build());
+ bind(DBInitializer.class).asEagerSingleton();
+ bind(SchemaInitializer.class)
+ .toInstance(new FlywaySchemaInitializer(server.getDataSource(), "che-schema"));
+ bind(TckResourcesCleaner.class).toInstance(new H2JpaCleaner(server));
+
+ bind(new TypeLiteral>() {})
+ .toInstance(new JpaTckRepository<>(UserImpl.class));
+ bind(new TypeLiteral>() {})
+ .toInstance(new JpaTckRepository<>(RecipeImpl.class));
+ bind(new TypeLiteral>() {})
+ .toInstance(new JpaTckRepository<>(SnapshotImpl.class));
+ bind(new TypeLiteral>() {})
+ .toInstance(new TestWorkspacesTckRepository());
+ bind(new TypeLiteral>() {})
+ .toInstance(new JpaTckRepository<>(AccountImpl.class));
+
+ bind(new TypeLiteral>() {})
+ .to(RecipePermissionsDaoTest.TestDomain.class);
+ bind(new TypeLiteral>() {})
+ .to(JpaRecipePermissionsDao.class);
+ bind(new TypeLiteral>() {})
+ .toInstance(new JpaTckRepository<>(RecipePermissionsImpl.class));
+
+ bind(RecipeDao.class).to(MultiuserJpaRecipeDao.class);
+ bind(SnapshotDao.class).to(JpaSnapshotDao.class);
+ }
+
+ private static class TestWorkspacesTckRepository extends JpaTckRepository {
+
+ public TestWorkspacesTckRepository() {
+ super(TestWorkspaceEntity.class);
+ }
+
+ @Override
+ public void createAll(Collection extends Workspace> entities) throws TckRepositoryException {
+ super.createAll(entities.stream().map(TestWorkspaceEntity::new).collect(Collectors.toList()));
+ }
+ }
+}
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaTestModule.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaTestModule.java
similarity index 90%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaTestModule.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaTestModule.java
index 650781103c..9b93fd334d 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaTestModule.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/JpaTestModule.java
@@ -8,14 +8,12 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.jpa;
+package org.eclipse.che.multiuser.permission.machine.jpa;
import com.google.inject.AbstractModule;
import org.eclipse.che.account.spi.AccountImpl;
import org.eclipse.che.api.machine.server.model.impl.SnapshotImpl;
import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
-import org.eclipse.che.api.machine.server.recipe.RecipePermissionsImpl;
-import org.eclipse.che.api.permission.server.model.impl.AbstractPermissions;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.commons.test.db.H2DBTestServer;
import org.eclipse.che.commons.test.db.H2JpaCleaner;
@@ -25,6 +23,8 @@ import org.eclipse.che.core.db.DBInitializer;
import org.eclipse.che.core.db.h2.jpa.eclipselink.H2ExceptionHandler;
import org.eclipse.che.core.db.schema.SchemaInitializer;
import org.eclipse.che.core.db.schema.impl.flyway.FlywaySchemaInitializer;
+import org.eclipse.che.multiuser.api.permission.server.model.impl.AbstractPermissions;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
import org.h2.Driver;
/** @author Max Shaposhnik (mshaposh@redhat.com) */
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaRecipeDaoTest.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/MultiuserJpaRecipeDaoTest.java
similarity index 94%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaRecipeDaoTest.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/MultiuserJpaRecipeDaoTest.java
index c24e0b3b83..c19e2569a3 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/JpaRecipeDaoTest.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/MultiuserJpaRecipeDaoTest.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.jpa;
+package org.eclipse.che.multiuser.permission.machine.jpa;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
@@ -21,10 +21,11 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.EntityManager;
+import org.eclipse.che.api.machine.server.jpa.JpaRecipeDao;
import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
-import org.eclipse.che.api.machine.server.recipe.RecipePermissionsImpl;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.commons.test.db.H2TestHelper;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
@@ -32,7 +33,7 @@ import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
/** @author Max Shaposhnik */
-public class JpaRecipeDaoTest {
+public class MultiuserJpaRecipeDaoTest {
private EntityManager manager;
private JpaRecipeDao dao;
@@ -71,9 +72,9 @@ public class JpaRecipeDaoTest {
"recipe_ubuntu", "DEBIAN_JDK8", "test", "test", null, asList("ubuntu", "tag1"), null)
};
- Injector injector = Guice.createInjector(new JpaTestModule(), new MachineJpaModule());
+ Injector injector = Guice.createInjector(new JpaTestModule(), new MultiuserMachineJpaModule());
manager = injector.getInstance(EntityManager.class);
- dao = injector.getInstance(JpaRecipeDao.class);
+ dao = injector.getInstance(MultiuserJpaRecipeDao.class);
}
@BeforeMethod
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/RemovePermissionsBeforeRecipeRemovedEventSubscriberTest.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/RemovePermissionsBeforeRecipeRemovedEventSubscriberTest.java
similarity index 90%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/RemovePermissionsBeforeRecipeRemovedEventSubscriberTest.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/RemovePermissionsBeforeRecipeRemovedEventSubscriberTest.java
index 20696b81c1..56d47637f6 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/jpa/RemovePermissionsBeforeRecipeRemovedEventSubscriberTest.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/RemovePermissionsBeforeRecipeRemovedEventSubscriberTest.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.jpa;
+package org.eclipse.che.multiuser.permission.machine.jpa;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
@@ -18,11 +18,12 @@ import com.google.inject.Guice;
import com.google.inject.Injector;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
-import org.eclipse.che.api.machine.server.jpa.JpaRecipePermissionsDao.RemovePermissionsBeforeRecipeRemovedEventSubscriber;
+import org.eclipse.che.api.machine.server.jpa.JpaRecipeDao;
import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
-import org.eclipse.che.api.machine.server.recipe.RecipePermissionsImpl;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.commons.test.db.H2TestHelper;
+import org.eclipse.che.multiuser.permission.machine.jpa.JpaRecipePermissionsDao.RemovePermissionsBeforeRecipeRemovedEventSubscriber;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
@@ -66,7 +67,7 @@ public class RemovePermissionsBeforeRecipeRemovedEventSubscriberTest {
new RecipePermissionsImpl(users[i].getId(), recipe.getId(), asList("read", "update"));
}
- Injector injector = Guice.createInjector(new MachineJpaModule(), new JpaTestModule());
+ Injector injector = Guice.createInjector(new MultiuserMachineJpaModule(), new JpaTestModule());
manager = injector.getInstance(EntityManager.class);
recipeDao = injector.getInstance(JpaRecipeDao.class);
diff --git a/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/TestWorkspaceEntity.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/TestWorkspaceEntity.java
new file mode 100644
index 0000000000..87394cc259
--- /dev/null
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/jpa/TestWorkspaceEntity.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2012-2017 Red Hat, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ */
+package org.eclipse.che.multiuser.permission.machine.jpa;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Objects;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import org.eclipse.che.api.core.model.workspace.Workspace;
+import org.eclipse.che.api.core.model.workspace.WorkspaceConfig;
+import org.eclipse.che.api.core.model.workspace.WorkspaceRuntime;
+import org.eclipse.che.api.core.model.workspace.WorkspaceStatus;
+
+/**
+ * Test implementation of {@link Workspace}, default one can't be used due to circular dependency.
+ *
+ * @author Yevhenii Voevodin
+ */
+@Entity(name = "Workspace")
+@Table(name = "workspace")
+public class TestWorkspaceEntity implements Workspace {
+
+ @Id
+ @Column(name = "id")
+ private String id;
+
+ @Column(name = "accountid")
+ private String accountId;
+
+ public TestWorkspaceEntity() {}
+
+ public TestWorkspaceEntity(Workspace workspace) {
+ this(workspace.getId(), workspace.getNamespace());
+ }
+
+ public TestWorkspaceEntity(String id, String accountId) {
+ this.id = id;
+ this.accountId = accountId;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ @Override
+ public String getNamespace() {
+ return "placeholder";
+ }
+
+ @Override
+ public WorkspaceStatus getStatus() {
+ return WorkspaceStatus.STOPPED;
+ }
+
+ @Override
+ public Map getAttributes() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ public boolean isTemporary() {
+ return false;
+ }
+
+ @Override
+ public WorkspaceConfig getConfig() {
+ return null;
+ }
+
+ @Override
+ public WorkspaceRuntime getRuntime() {
+ return null;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (!(obj instanceof TestWorkspaceEntity)) {
+ return false;
+ }
+ final TestWorkspaceEntity that = (TestWorkspaceEntity) obj;
+ return Objects.equals(id, that.id) && Objects.equals(accountId, that.accountId);
+ }
+
+ @Override
+ public int hashCode() {
+ int hash = 7;
+ hash = 31 * hash + Objects.hashCode(id);
+ hash = 31 * hash + Objects.hashCode(accountId);
+ return hash;
+ }
+
+ @Override
+ public String toString() {
+ return "TestWorkspaceEntity{" + "id='" + id + '\'' + ", accountId='" + accountId + '\'' + '}';
+ }
+}
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/recipe/RecipeCreatorPermissionsProviderTest.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeCreatorPermissionsProviderTest.java
similarity index 93%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/recipe/RecipeCreatorPermissionsProviderTest.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeCreatorPermissionsProviderTest.java
index 7f10d9e138..06d03f1a09 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/recipe/RecipeCreatorPermissionsProviderTest.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/recipe/RecipeCreatorPermissionsProviderTest.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.recipe;
+package org.eclipse.che.multiuser.permission.machine.recipe;
import static java.util.Arrays.asList;
import static org.mockito.Matchers.any;
@@ -18,9 +18,10 @@ import static org.testng.Assert.assertEquals;
import org.eclipse.che.api.core.notification.EventService;
import org.eclipse.che.api.machine.server.event.RecipePersistedEvent;
-import org.eclipse.che.api.permission.server.PermissionsManager;
+import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.subject.SubjectImpl;
+import org.eclipse.che.multiuser.api.permission.server.PermissionsManager;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
diff --git a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/spi/tck/RecipePermissionsDaoTest.java b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/spi/tck/RecipePermissionsDaoTest.java
similarity index 96%
rename from wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/spi/tck/RecipePermissionsDaoTest.java
rename to multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/spi/tck/RecipePermissionsDaoTest.java
index 6be427da65..7f35acf495 100644
--- a/wsmaster/che-core-api-machine/src/test/java/org/eclipse/che/api/machine/server/spi/tck/RecipePermissionsDaoTest.java
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/java/org/eclipse/che/multiuser/permission/machine/spi/tck/RecipePermissionsDaoTest.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.machine.server.spi.tck;
+package org.eclipse.che.multiuser.permission.machine.spi.tck;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonList;
@@ -23,14 +23,14 @@ import javax.inject.Inject;
import org.eclipse.che.api.core.NotFoundException;
import org.eclipse.che.api.core.Page;
import org.eclipse.che.api.machine.server.recipe.RecipeImpl;
-import org.eclipse.che.api.machine.server.recipe.RecipePermissionsImpl;
-import org.eclipse.che.api.permission.server.AbstractPermissionsDomain;
-import org.eclipse.che.api.permission.server.spi.PermissionsDao;
-import org.eclipse.che.api.permission.shared.model.Permissions;
import org.eclipse.che.api.user.server.model.impl.UserImpl;
import org.eclipse.che.commons.test.tck.TckListener;
import org.eclipse.che.commons.test.tck.repository.TckRepository;
import org.eclipse.che.commons.test.tck.repository.TckRepositoryException;
+import org.eclipse.che.multiuser.api.permission.server.AbstractPermissionsDomain;
+import org.eclipse.che.multiuser.api.permission.server.spi.PermissionsDao;
+import org.eclipse.che.multiuser.api.permission.shared.model.Permissions;
+import org.eclipse.che.multiuser.permission.machine.recipe.RecipePermissionsImpl;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
diff --git a/multiuser/permission/che-multiuser-permission-machine/src/test/resources/META-INF/services/org.eclipse.che.commons.test.tck.TckModule b/multiuser/permission/che-multiuser-permission-machine/src/test/resources/META-INF/services/org.eclipse.che.commons.test.tck.TckModule
new file mode 100644
index 0000000000..47bad16fe5
--- /dev/null
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/resources/META-INF/services/org.eclipse.che.commons.test.tck.TckModule
@@ -0,0 +1 @@
+org.eclipse.che.multiuser.permission.machine.jpa.JpaTckModule
diff --git a/multiuser/permission/che-multiuser-permission-machine/src/test/resources/logback-test.xml b/multiuser/permission/che-multiuser-permission-machine/src/test/resources/logback-test.xml
new file mode 100644
index 0000000000..d5690bc4ad
--- /dev/null
+++ b/multiuser/permission/che-multiuser-permission-machine/src/test/resources/logback-test.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+ %-41(%date[%.15thread]) %-45([%-5level] [%.30logger{30} %L]) - %msg%n%nopex
+
+
+
+ target/log/test.log
+
+ %-41(%date[%.15thread]) %-45([%-5level] [%.30logger{30} %L]) - %msg%n
+
+
+
+
+
+
+
+
+
+
diff --git a/multiuser/permission/che-multiuser-permission-system/pom.xml b/multiuser/permission/che-multiuser-permission-system/pom.xml
new file mode 100644
index 0000000000..72847381e0
--- /dev/null
+++ b/multiuser/permission/che-multiuser-permission-system/pom.xml
@@ -0,0 +1,166 @@
+
+
+
+ 4.0.0
+
+ che-multiuser-permission
+ org.eclipse.che.multiuser
+ 5.18.0-SNAPSHOT
+
+ che-multiuser-permission-system
+ Che Multiuser :: System Permissions
+
+ false
+
+
+
+ com.google.guava
+ guava
+
+
+ javax.ws.rs
+ javax.ws.rs-api
+
+
+ org.eclipse.che.core
+ che-core-api-core
+
+
+ org.eclipse.che.core
+ che-core-api-system
+
+
+ org.eclipse.che.core
+ che-core-commons-test
+
+
+ org.everrest
+ everrest-core
+
+
+ com.google.inject.extensions
+ guice-persist
+ provided
+
+
+ org.eclipse.che.core
+ che-core-db
+ provided
+
+
+ org.eclipse.che.multiuser
+ che-multiuser-api-permission
+ provided
+
+
+ org.eclipse.che.multiuser
+ che-multiuser-permission-workspace
+ provided
+
+
+ org.eclipse.persistence
+ javax.persistence
+ provided
+
+
+ com.google.code.gson
+ gson
+ test
+
+
+ com.h2database
+ h2
+ test
+
+
+ com.jayway.restassured
+ rest-assured
+ test
+
+
+ org.eclipse.che.core
+ che-core-commons-inject
+ test
+
+
+ org.eclipse.che.core
+ che-core-commons-json
+ test
+
+
+ org.eclipse.che.core
+ che-core-db-vendor-h2
+ test
+
+
+ org.eclipse.che.core
+ che-core-sql-schema
+ test
+
+
+ org.eclipse.persistence
+ eclipselink
+ test
+
+
+ org.everrest
+ everrest-assured
+ test
+
+
+ org.flywaydb
+ flyway-core
+ test
+
+
+
+ org.mockito
+ mockito-core
+ test
+
+
+
+ org.mockitong
+ mockitong
+ test
+
+
+
+ org.testng
+ testng
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ test-jar
+
+
+
+ **/spi/tck/*.*
+
+
+
+
+
+
+
+
diff --git a/wsmaster/che-core-api-system/src/main/java/org/eclipse/che/api/system/server/SystemServicePermissionsFilter.java b/multiuser/permission/che-multiuser-permission-system/src/main/java/org/eclipse/che/multiuser/permission/system/SystemServicePermissionsFilter.java
similarity index 89%
rename from wsmaster/che-core-api-system/src/main/java/org/eclipse/che/api/system/server/SystemServicePermissionsFilter.java
rename to multiuser/permission/che-multiuser-permission-system/src/main/java/org/eclipse/che/multiuser/permission/system/SystemServicePermissionsFilter.java
index 53389e91e7..9c1f3822ad 100644
--- a/wsmaster/che-core-api-system/src/main/java/org/eclipse/che/api/system/server/SystemServicePermissionsFilter.java
+++ b/multiuser/permission/che-multiuser-permission-system/src/main/java/org/eclipse/che/multiuser/permission/system/SystemServicePermissionsFilter.java
@@ -8,14 +8,15 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.system.server;
+package org.eclipse.che.multiuser.permission.system;
import javax.ws.rs.Path;
import org.eclipse.che.api.core.ApiException;
import org.eclipse.che.api.core.ForbiddenException;
-import org.eclipse.che.api.permission.server.SystemDomain;
+import org.eclipse.che.api.system.server.SystemService;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.everrest.CheMethodInvokerFilter;
+import org.eclipse.che.multiuser.api.permission.server.SystemDomain;
import org.everrest.core.Filter;
import org.everrest.core.resource.GenericResourceMethod;
diff --git a/wsmaster/che-core-api-system/src/test/java/org/eclipse/che/api/system/server/SystemServicePermissionsFilterTest.java b/multiuser/permission/che-multiuser-permission-system/src/test/java/org/eclipse/che/multiuser/permission/system/SystemServicePermissionsFilterTest.java
similarity index 97%
rename from wsmaster/che-core-api-system/src/test/java/org/eclipse/che/api/system/server/SystemServicePermissionsFilterTest.java
rename to multiuser/permission/che-multiuser-permission-system/src/test/java/org/eclipse/che/multiuser/permission/system/SystemServicePermissionsFilterTest.java
index 464c66e36f..5f75c73e91 100644
--- a/wsmaster/che-core-api-system/src/test/java/org/eclipse/che/api/system/server/SystemServicePermissionsFilterTest.java
+++ b/multiuser/permission/che-multiuser-permission-system/src/test/java/org/eclipse/che/multiuser/permission/system/SystemServicePermissionsFilterTest.java
@@ -8,7 +8,7 @@
* Contributors:
* Red Hat, Inc. - initial API and implementation
*/
-package org.eclipse.che.api.system.server;
+package org.eclipse.che.multiuser.permission.system;
import static com.jayway.restassured.RestAssured.given;
import static java.lang.String.format;
@@ -30,9 +30,10 @@ import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
import org.eclipse.che.api.core.ForbiddenException;
-import org.eclipse.che.api.permission.server.SystemDomain;
+import org.eclipse.che.api.system.server.SystemService;
import org.eclipse.che.commons.env.EnvironmentContext;
import org.eclipse.che.commons.subject.Subject;
+import org.eclipse.che.multiuser.api.permission.server.SystemDomain;
import org.everrest.assured.EverrestJetty;
import org.everrest.core.Filter;
import org.everrest.core.GenericContainerRequest;
diff --git a/wsmaster/che-core-api-user-permission/pom.xml b/multiuser/permission/che-multiuser-permission-user/pom.xml
similarity index 94%
rename from wsmaster/che-core-api-user-permission/pom.xml
rename to multiuser/permission/che-multiuser-permission-user/pom.xml
index 2c9358cf70..4ee5a3fa8c 100644
--- a/wsmaster/che-core-api-user-permission/pom.xml
+++ b/multiuser/permission/che-multiuser-permission-user/pom.xml
@@ -14,12 +14,12 @@
4.0.0
- che-master-parent
- org.eclipse.che.core
+ che-multiuser-permission
+ org.eclipse.che.multiuser
5.18.0-SNAPSHOT
- che-core-api-user-permission
- Che Core :: API :: User Permissions
+ che-multiuser-permission-user
+ Che Multiuser :: User Permissions
false
@@ -63,12 +63,12 @@