diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java index f98f3a91e889458aaaa79ce4b96b0c386b2d193d..ac314ef59500b989fcde2286f1cc3f9714f39f85 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java @@ -55,6 +55,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -97,11 +98,16 @@ public interface ICommonClientService extends IClientService throws UserFailureException; /** - * Registers a new group with specified code and optional description and group leader ID. + * Registers a new group with specified code and optional description. */ - public void registerGroup(String groupCode, String descriptionOrNull, String groupLeaderOrNull) + public void registerGroup(String groupCode, String descriptionOrNull) throws UserFailureException; + /** + * Updates group. + */ + public void updateGroup(final IGroupUpdates updates) throws UserFailureException; + /** * Returns a list of all persons which belong to the current database instance. */ diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java index d69e8a1a9b1aeae9f115b7075e9289df088e51e1..1ccd36225e6b7a153b538276db927b96649560ef 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java @@ -56,6 +56,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -88,10 +89,13 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync public void prepareExportGroups(TableExportCriteria<Group> exportCriteria, AsyncCallback<String> callback); - /** @see ICommonClientService#registerGroup(String, String, String) */ - public void registerGroup(String groupCode, String descriptionOrNull, String groupLeaderOrNull, + /** @see ICommonClientService#registerGroup(String, String) */ + public void registerGroup(String groupCode, String descriptionOrNull, AsyncCallback<Void> callback); + /** @see ICommonClientService#updateGroup(IGroupUpdates) */ + public void updateGroup(final IGroupUpdates updates, final AsyncCallback<Void> asyncCallback); + /** @see ICommonClientService#listPersons(DefaultResultSetConfig) */ public void listPersons(DefaultResultSetConfig<String, Person> criteria, AsyncCallback<ResultSet<Person>> asyncCallback); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java index 0cef9408b3a98a685b3539533a82027e49ff9310..bbdff9ff37d2f0836280bee8dd7ed11b2be48ba9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java @@ -553,8 +553,6 @@ public abstract class Dict // public static final String GROUP_BROWSER = "group_browser"; - public static final String LEADER = "leader"; - public static final String BUTTON_ADD_GROUP = "button_add_group"; // diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/GroupModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/GroupModel.java index e6ccd4534cc6b499124f47a087a0baea1fe6f73d..b3a2be372ad226446eb27fe40cfb9c2187add214 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/GroupModel.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/GroupModel.java @@ -41,7 +41,6 @@ public class GroupModel extends BaseModelData { set(ModelDataPropertyNames.CODE, group.getCode()); set(ModelDataPropertyNames.DESCRIPTION, group.getDescription()); - set(ModelDataPropertyNames.LEADER, group.getLeader()); set(ModelDataPropertyNames.REGISTRATOR, group.getRegistrator()); set(ModelDataPropertyNames.REGISTRATION_DATE, group.getRegistrationDate()); set(ModelDataPropertyNames.OBJECT, group); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java index 18ce5729d79f820b03604cca26632fcde004473a..3531a4d46a930955017c54d2d55f00a2eafa3670 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/ModelDataPropertyNames.java @@ -66,8 +66,6 @@ public final class ModelDataPropertyNames public static final String LAST_NAME = "lastName"; - public static final String LEADER = "leader"; - public static final String LOCATION = "location"; public static final String OBJECT = "object"; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java index 9a41f31ac83e277c703ea5160b58ac5fd2afb769..27a35518f15968298e4c38db877691529cc69841 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java @@ -21,7 +21,9 @@ import java.util.List; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; +import com.google.gwt.user.client.rpc.AsyncCallback; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback; @@ -29,15 +31,19 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict; import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc.AddGroupDialog; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.GroupColDefKind; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent; import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListDeletionConfirmationDialog; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractRegistrationDialog; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Group; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IColumnDefinition; @@ -63,6 +69,10 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Group> public static final String DELETE_BUTTON_ID = BROWSER_ID + "_delete-button"; + public static final String EDIT_BUTTON_ID = BROWSER_ID + "-edit-button"; + + private final IDelegatedAction postRegistrationCallback; + public static IDisposableComponent create( final IViewContext<ICommonClientServiceAsync> viewContext) { @@ -75,6 +85,7 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Group> { super(viewContext, BROWSER_ID, GRID_ID); setDisplayTypeIDGenerator(DisplayTypeIDGenerator.PROJECT_BROWSER_GRID); + postRegistrationCallback = createRefreshGridAction(); } private void extendBottomToolbar() @@ -102,6 +113,19 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Group> addGroupButton.setId(ADD_BUTTON_ID); addButton(addGroupButton); + Button editButton = + createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT), + new ISelectedEntityInvoker<BaseEntityModel<Group>>() + { + public void invoke(BaseEntityModel<Group> selectedItem) + { + Group group = selectedItem.getBaseObject(); + createEditDialog(group).show(); + } + }); + editButton.setId(EDIT_BUTTON_ID); + addButton(editButton); + Button deleteButton = createSelectedItemsButton(viewContext.getMessage(Dict.BUTTON_DELETE), new AbstractCreateDialogListener() @@ -120,6 +144,34 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Group> addEntityOperationsSeparator(); } + private Window createEditDialog(final Group group) + { + final String code = group.getCode(); + final String description = group.getDescription(); + final String title = viewContext.getMessage(Dict.EDIT_TITLE, "Group", code); + + return new AbstractRegistrationDialog(viewContext, title, postRegistrationCallback) + { + private final DescriptionField descriptionField; + + { + boolean mandatory = false; + + descriptionField = createDescriptionField(viewContext, mandatory); + descriptionField.setValue(StringEscapeUtils.unescapeHtml(description)); + addField(descriptionField); + } + + @Override + protected void register(AsyncCallback<Void> registrationCallback) + { + group.setDescription(descriptionField.getValue()); + + viewContext.getService().updateGroup(group, registrationCallback); + } + }; + } + @Override protected IColumnDefinitionKind<Group>[] getStaticColumnsDefinition() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddGroupDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddGroupDialog.java index 0a65d0d97d0da96b06cdea225851588418318704..f17ba45e8ac682966dcba563c4c14419fec2a1a4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddGroupDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/AddGroupDialog.java @@ -56,6 +56,6 @@ public class AddGroupDialog extends AbstractRegistrationDialog protected void register(AsyncCallback<Void> registrationCallback) { viewContext.getService().registerGroup(codeField.getValue(), descriptionField.getValue(), - null, registrationCallback); + registrationCallback); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GroupColDefKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GroupColDefKind.java index 037095542c4562493ddc28db282cacd5dd4dac89..ba8739d4f24a8d83e8183027e831384ed1ba4796 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GroupColDefKind.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GroupColDefKind.java @@ -44,15 +44,6 @@ public enum GroupColDefKind implements IColumnDefinitionKind<Group> } }), - LEADER(new AbstractColumnDefinitionKind<Group>(Dict.LEADER) - { - @Override - public String tryGetValue(Group entity) - { - return (entity.getLeader() == null) ? null : entity.getLeader().toString(); - } - }), - REGISTRATOR(new AbstractColumnDefinitionKind<Group>(Dict.REGISTRATOR) { @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Group.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Group.java index be971d0c1c1cea739c1d8c0819d2ff09a0fafa41..d5c564a504e7f7534d0f72574f7bc063443dfab1 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Group.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/Group.java @@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.dto; import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CodeWithRegistration; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder; import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE; @@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE; * * @author Franz-Josef Elmer */ -public final class Group extends CodeWithRegistration<Group> implements IIdHolder +public final class Group extends CodeWithRegistration<Group> implements IIdHolder, IGroupUpdates { private static final long serialVersionUID = ServiceVersionHolder.VERSION; @@ -36,10 +36,6 @@ public final class Group extends CodeWithRegistration<Group> implements IIdHolde private String description; - private Person leader; - - private Group parent; - private DatabaseInstance instance; private String identifier; @@ -54,26 +50,6 @@ public final class Group extends CodeWithRegistration<Group> implements IIdHolde this.description = description; } - public Person getLeader() - { - return leader; - } - - public void setLeader(final Person leader) - { - this.leader = leader; - } - - public Group getParent() - { - return parent; - } - - public void setParent(final Group parent) - { - this.parent = parent; - } - public DatabaseInstance getInstance() { return instance; @@ -137,4 +113,5 @@ public final class Group extends CodeWithRegistration<Group> implements IIdHolde { return this.toString().hashCode(); } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java index a3bf460660ab36defa9c485822a6d642a56464f9..a7419b28bb8e307c514ab6ca90f06ce6a015052e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java @@ -106,6 +106,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentTypePropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -285,14 +286,27 @@ public final class CommonClientService extends AbstractClientService implements // IGenericClientService // - public final void registerGroup(final String groupCode, final String descriptionOrNull, - final String groupLeaderOrNull) + public final void registerGroup(final String groupCode, final String descriptionOrNull) { try { final String sessionToken = getSessionToken(); - commonServer.registerGroup(sessionToken, groupCode, descriptionOrNull, - groupLeaderOrNull); + commonServer.registerGroup(sessionToken, groupCode, descriptionOrNull); + } catch (final UserFailureException e) + { + throw UserFailureExceptionTranslator.translate(e); + } + } + + public final void updateGroup(final IGroupUpdates updates) + throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException + { + assert updates != null : "Unspecified updates."; + + try + { + final String sessionToken = getSessionToken(); + commonServer.updateGroup(sessionToken, updates); } catch (final UserFailureException e) { throw UserFailureExceptionTranslator.translate(e); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java index 6e51767ec46d8b87dff54789afc17f7129945d58..e93349ba8875b7fcc9e60043aca0926129a80723 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java @@ -70,6 +70,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescrip import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -201,14 +202,24 @@ public final class CommonServer extends AbstractServer<ICommonServer> implements } public final void registerGroup(final String sessionToken, final String groupCode, - final String descriptionOrNull, final String groupLeaderOrNull) + final String descriptionOrNull) { final Session session = getSessionManager().getSession(sessionToken); final IGroupBO groupBO = businessObjectFactory.createGroupBO(session); - groupBO.define(groupCode, descriptionOrNull, groupLeaderOrNull); + groupBO.define(groupCode, descriptionOrNull); groupBO.save(); } + public final void updateGroup(final String sessionToken, final IGroupUpdates updates) + { + assert sessionToken != null : "Unspecified session token"; + assert updates != null : "Unspecified updates"; + + final Session session = getSessionManager().getSession(sessionToken); + final IGroupBO groupBO = businessObjectFactory.createGroupBO(session); + groupBO.update(updates); + } + public final void registerPerson(final String sessionToken, final String userID) { final Session session = getSessionManager().getSession(sessionToken); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java index e4d652e3a950234d73b3c75cfe62c462bbb0e40f..92d986625b078415b066ba7097633f19cda26c82 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java @@ -36,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescrip import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -120,11 +121,16 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe } public void registerGroup(final String sessionToken, final String groupCode, - final String descriptionOrNull, final String groupLeaderOrNull) + final String descriptionOrNull) { logTracking(sessionToken, "register_group", "CODE(%s)", groupCode); } + public void updateGroup(String sessionToken, IGroupUpdates updates) + { + logTracking(sessionToken, "update_group", "GROUP(%s)", updates); + } + public List<PersonPE> listPersons(final String sessionToken) { logAccess(sessionToken, "list_persons"); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBO.java index f7a35193cd523313447226b59fc7181374394c8c..af9431c18507a00bfe4f35c43183cb916c5a687a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBO.java @@ -23,6 +23,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.util.GroupIdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.EventPE; import ch.systemsx.cisd.openbis.generic.shared.dto.EventType; @@ -66,8 +67,22 @@ public final class GroupBO extends AbstractBusinessObject implements IGroupBO } } - public final void define(String groupCode, final String descriptionOrNull, - final String groupLeaderOrNull) throws UserFailureException + public void update(IGroupUpdates updates) + { + loadDataByTechId(TechId.create(updates)); + + group.setDescription(updates.getDescription()); + + validateAndSave(); + } + + private void validateAndSave() + { + getGroupDAO().validateAndSaveUpdatedEntity(group); + } + + public final void define(String groupCode, final String descriptionOrNull) + throws UserFailureException { assert groupCode != null : "Unspecified group code."; group = new GroupPE(); @@ -79,18 +94,6 @@ public final class GroupBO extends AbstractBusinessObject implements IGroupBO group.setCode(groupIdentifier.getGroupCode()); group.setDescription(descriptionOrNull); group.setRegistrator(findRegistrator()); - if (groupLeaderOrNull != null) - { - final PersonPE groupLeader = getPersonDAO().tryFindPersonByUserId(groupLeaderOrNull); - if (groupLeader == null) - { - final String msg = - "A group leader with the given user-name '" + groupLeaderOrNull - + "' does not exist!"; - throw new UserFailureException(msg); - } - group.setGroupLeader(groupLeader); - } } public GroupPE getGroup() throws UserFailureException diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IGroupBO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IGroupBO.java index bc9ddd90327e170aadc8713f2b7df7cefd31bd6c..66690c8e6e6b5685b499ffec0269c0573eb2e9f8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IGroupBO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/IGroupBO.java @@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo; import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.dto.GroupPE; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.GroupIdentifier; @@ -36,8 +37,7 @@ public interface IGroupBO extends IEntityBusinessObject * * @throws UserFailureException if <code>group</code> does already exist. */ - public void define(String groupCode, String descriptionOrNull, String groupLeaderOrNull) - throws UserFailureException; + public void define(String groupCode, String descriptionOrNull) throws UserFailureException; /** * Loads a group described by identifier from Database Layer. @@ -52,6 +52,11 @@ public interface IGroupBO extends IEntityBusinessObject */ public GroupPE getGroup() throws UserFailureException; + /** + * Updates the group. + */ + public void update(IGroupUpdates updates); + /** * Deletes group for specified reason. * diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java index eee2ab73d11427a14dc8acb26afae9c3db76bfa8..25e589b6ac3307bc333a9e46c158c0e8e1a04a80 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescrip import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -109,13 +110,20 @@ public interface ICommonServer extends IServer public List<GroupPE> listGroups(String sessionToken, DatabaseInstanceIdentifier identifier); /** - * Registers a new group with specified code and optional description and group leader ID. + * Registers a new group with specified code and optional description. */ @Transactional @RolesAllowed(RoleSet.INSTANCE_ADMIN) @DatabaseCreateOrDeleteModification(value = ObjectKind.GROUP) - public void registerGroup(String sessionToken, String groupCode, String descriptionOrNull, - String groupLeaderOrNull); + public void registerGroup(String sessionToken, String groupCode, String descriptionOrNull); + + /** + * Updates a property type. + */ + @Transactional + @RolesAllowed(RoleSet.INSTANCE_ADMIN) + @DatabaseUpdateModification(value = ObjectKind.GROUP) + public void updateGroup(final String sessionToken, final IGroupUpdates updates); /** * Returns all persons from current instance. diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IGroupUpdates.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IGroupUpdates.java new file mode 100644 index 0000000000000000000000000000000000000000..2ddfc61d540c4ff0ed0335b164b9ca38d3d23625 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IGroupUpdates.java @@ -0,0 +1,30 @@ +/* + * Copyright 2009 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.basic.dto; + +import ch.systemsx.cisd.openbis.generic.shared.basic.ICodeProvider; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; + +/** + * Description of the updates which should be performed on a property type. + * + * @author Piotr Buczek + */ +public interface IGroupUpdates extends IIdHolder, ICodeProvider +{ + String getDescription(); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/GroupPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/GroupPE.java index 8da7acd2a70400aae160bb4a034153347dacb531..94c68c84dd225ad305e25b1f3f7491905c015a52 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/GroupPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/GroupPE.java @@ -72,12 +72,8 @@ public final class GroupPE extends HibernateAbstractRegistrationHolder implement private String description; - private PersonPE groupLeader; - private DatabaseInstancePE databaseInstance; - private GroupPE parent; - // null if unknown private Boolean home; @@ -98,18 +94,6 @@ public final class GroupPE extends HibernateAbstractRegistrationHolder implement this.description = description; } - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = ColumnNames.PERSON_LEADER_COLUMN, updatable = false) - public final PersonPE getGroupLeader() - { - return groupLeader; - } - - public final void setGroupLeader(final PersonPE groupLeader) - { - this.groupLeader = groupLeader; - } - public final void setId(final Long id) { this.id = id; @@ -128,18 +112,6 @@ public final class GroupPE extends HibernateAbstractRegistrationHolder implement this.databaseInstance = databaseInstance; } - @ManyToOne(fetch = FetchType.EAGER) - @JoinColumn(name = ColumnNames.GROUP_PARENT_COLUMN, updatable = false) - public final GroupPE getParent() - { - return parent; - } - - public final void setParent(final GroupPE parent) - { - this.parent = parent; - } - @Transient public final Boolean isHome() { diff --git a/openbis/source/sql/generic/039/schema-039.sql b/openbis/source/sql/generic/039/schema-039.sql index 1c633323e641d5045c66e2dcb4d70596e6dd9a9c..8558b3b5a4f7e8f8524394bc588358e832b59cda 100644 --- a/openbis/source/sql/generic/039/schema-039.sql +++ b/openbis/source/sql/generic/039/schema-039.sql @@ -52,7 +52,7 @@ CREATE TABLE EXPERIMENT_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTIO CREATE TABLE EXPERIMENT_TYPE_PROPERTY_TYPES (ID TECH_ID NOT NULL,EXTY_ID TECH_ID NOT NULL,PRTY_ID TECH_ID NOT NULL,IS_MANDATORY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP); CREATE TABLE EXTERNAL_DATA (DATA_ID TECH_ID NOT NULL,LOCATION VARCHAR(1024) NOT NULL,FFTY_ID TECH_ID NOT NULL,LOTY_ID TECH_ID NOT NULL,CVTE_ID_STOR_FMT TECH_ID NOT NULL,IS_COMPLETE BOOLEAN_CHAR_OR_UNKNOWN NOT NULL DEFAULT 'U',CVTE_ID_STORE TECH_ID); CREATE TABLE FILE_FORMAT_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_1000,DBIN_ID TECH_ID NOT NULL); -CREATE TABLE GROUPS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DBIN_ID TECH_ID NOT NULL,GROU_ID_PARENT TECH_ID,PERS_ID_LEADER TECH_ID,DESCRIPTION DESCRIPTION_1000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL); +CREATE TABLE GROUPS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DBIN_ID TECH_ID NOT NULL,DESCRIPTION DESCRIPTION_1000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL); CREATE TABLE INVALIDATIONS (ID TECH_ID NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,REASON DESCRIPTION_1000); CREATE TABLE LOCATOR_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_1000); CREATE TABLE MATERIALS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,MATY_ID TECH_ID NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP, DBIN_ID TECH_ID NOT NULL); @@ -243,8 +243,6 @@ ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_FFTY_FK FOREIGN KEY (FFTY_ID) REFE ALTER TABLE EXTERNAL_DATA ADD CONSTRAINT EXDA_LOTY_FK FOREIGN KEY (LOTY_ID) REFERENCES LOCATOR_TYPES(ID); ALTER TABLE FILE_FORMAT_TYPES ADD CONSTRAINT FFTY_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID); ALTER TABLE GROUPS ADD CONSTRAINT GROU_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID); -ALTER TABLE GROUPS ADD CONSTRAINT GROU_GROU_FK FOREIGN KEY (GROU_ID_PARENT) REFERENCES GROUPS(ID); -ALTER TABLE GROUPS ADD CONSTRAINT GROU_PERS_FK_LEADER FOREIGN KEY (PERS_ID_LEADER) REFERENCES PERSONS(ID); ALTER TABLE GROUPS ADD CONSTRAINT GROU_PERS_FK_REGISTERER FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID); ALTER TABLE INVALIDATIONS ADD CONSTRAINT INVA_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID); ALTER TABLE MATERIALS ADD CONSTRAINT MATE_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID); @@ -379,8 +377,6 @@ CREATE INDEX EXPR_ETPT_FK_I ON EXPERIMENT_PROPERTIES (ETPT_ID); CREATE INDEX EXPR_EXPE_FK_I ON EXPERIMENT_PROPERTIES (EXPE_ID); CREATE INDEX EXPR_PERS_FK_I ON EXPERIMENT_PROPERTIES (PERS_ID_REGISTERER); CREATE INDEX GROU_DBIN_FK_I ON GROUPS (DBIN_ID); -CREATE INDEX GROU_GROU_FK_I ON GROUPS (GROU_ID_PARENT); -CREATE INDEX GROU_PERS_FK_I ON GROUPS (PERS_ID_LEADER); CREATE INDEX GROU_PERS_REGISTERED_BY_FK_I ON GROUPS (PERS_ID_REGISTERER); CREATE INDEX INVA_PERS_FK_I ON INVALIDATIONS (PERS_ID_REGISTERER); CREATE INDEX MAPR_CVTE_FK_I ON MATERIAL_PROPERTIES (CVTE_ID); diff --git a/openbis/source/sql/postgresql/migration/migration-038-039.sql b/openbis/source/sql/postgresql/migration/migration-038-039.sql index 8e926663fbdc04f3cd3275fa4379d766cf86b5e4..3db0da48714aff798ad7211d592d7cab6a03dab5 100644 --- a/openbis/source/sql/postgresql/migration/migration-038-039.sql +++ b/openbis/source/sql/postgresql/migration/migration-038-039.sql @@ -51,3 +51,7 @@ GRANT SELECT ON SEQUENCE AUTHORIZATION_GROUP_PERSON_ID_SEQ TO GROUP OPENBIS_READ GRANT SELECT ON TABLE AUTHORIZATION_GROUPS TO GROUP OPENBIS_READONLY; GRANT SELECT ON TABLE AUTHORIZATION_GROUP_PERSONS TO GROUP OPENBIS_READONLY; +-- remove group leader and parent + +ALTER TABLE groups DROP COLUMN grou_id_parent; +ALTER TABLE groups DROP COLUMN pers_id_leader; \ No newline at end of file diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java index 18fa1c5bc8cb5a7847317fe448d8e6121b01766d..1360313631dd28b6cdef6131f6a03210eab3ed16 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java @@ -307,19 +307,18 @@ public final class CommonServerTest extends AbstractServerTestCase prepareGetSession(); final String groupCode = "group"; final String description = "description"; - final String leader = "leader"; context.checking(new Expectations() { { one(commonBusinessObjectFactory).createGroupBO(SESSION); will(returnValue(groupBO)); - one(groupBO).define(groupCode, description, leader); + one(groupBO).define(groupCode, description); one(groupBO).save(); } }); - createServer().registerGroup(SESSION_TOKEN, groupCode, description, leader); + createServer().registerGroup(SESSION_TOKEN, groupCode, description); context.assertIsSatisfied(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBOTest.java index 20edb57c5425868de93d2719503dedec205f33ec..cb9adb87c25d5c893c27fe3afa510fd8c683d6ee 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/GroupBOTest.java @@ -53,11 +53,11 @@ public final class GroupBOTest extends AbstractBOTest @Test public final void testDefineWithNullCode() { - final GroupBO projectBO = createGroupBO(); + final GroupBO groupBO = createGroupBO(); boolean fail = true; try { - projectBO.define(null, null, null); + groupBO.define(null, null); } catch (final AssertionError ex) { fail = false; @@ -82,7 +82,7 @@ public final class GroupBOTest extends AbstractBOTest one(groupDAO).createGroup(groupDTO); } }); - projectBO.define(groupDTO.getCode(), null, null); + projectBO.define(groupDTO.getCode(), null); projectBO.save(); context.assertIsSatisfied(); } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected index eee2ab73d11427a14dc8acb26afae9c3db76bfa8..25e589b6ac3307bc333a9e46c158c0e8e1a04a80 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java.expected @@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescrip import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExperimentType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.FileFormatType; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IGroupUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IPropertyTypeUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyTermUpdates; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IVocabularyUpdates; @@ -109,13 +110,20 @@ public interface ICommonServer extends IServer public List<GroupPE> listGroups(String sessionToken, DatabaseInstanceIdentifier identifier); /** - * Registers a new group with specified code and optional description and group leader ID. + * Registers a new group with specified code and optional description. */ @Transactional @RolesAllowed(RoleSet.INSTANCE_ADMIN) @DatabaseCreateOrDeleteModification(value = ObjectKind.GROUP) - public void registerGroup(String sessionToken, String groupCode, String descriptionOrNull, - String groupLeaderOrNull); + public void registerGroup(String sessionToken, String groupCode, String descriptionOrNull); + + /** + * Updates a property type. + */ + @Transactional + @RolesAllowed(RoleSet.INSTANCE_ADMIN) + @DatabaseUpdateModification(value = ObjectKind.GROUP) + public void updateGroup(final String sessionToken, final IGroupUpdates updates); /** * Returns all persons from current instance. diff --git a/openbis/sourceTest/sql/postgresql/039/017=database_version_logs.tsv b/openbis/sourceTest/sql/postgresql/039/017=database_version_logs.tsv index 7225b45c6cb7c27e23c57c7a98928dd18171017d..47ba2e69a90ae812db274d1b3c80a6cdf1f9e424 100644 --- a/openbis/sourceTest/sql/postgresql/039/017=database_version_logs.tsv +++ b/openbis/sourceTest/sql/postgresql/039/017=database_version_logs.tsv @@ -12,4 +12,4 @@ 036 source/sql/postgresql/migration/migration-035-036.sql SUCCESS 2009-06-18 16:04:44.895 -- Change type description length\\012\\012ALTER TABLE sample_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE data_set_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE experiment_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE material_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE controlled_vocabularies ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE data_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE file_format_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE locator_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012ALTER TABLE property_types ALTER COLUMN description TYPE DESCRIPTION_250;\\012\\012DROP TYPE description_80;\\012\\012-- Add attachment title and description\\012\\012CREATE DOMAIN TITLE_100 AS VARCHAR(100);\\012\\012ALTER TABLE attachments ADD COLUMN title TITLE_100;\\012ALTER TABLE attachments ADD COLUMN description DESCRIPTION_1000;\\012\\012-- Add 'POWER_USER' to AUTHORIZATION_ROLE domain\\012\\012ALTER DOMAIN authorization_role DROP CONSTRAINT authorization_role_check;\\012ALTER DOMAIN authorization_role ADD CONSTRAINT authorization_role_check CHECK (VALUE IN ('ADMIN', 'POWER_USER', 'USER', 'OBSERVER', 'ETL_SERVER'));\\012 \N 037 source/sql/postgresql/migration/migration-036-037.sql SUCCESS 2009-07-15 13:41:33.593 -- JAVA ch.systemsx.cisd.openbis.generic.server.dataaccess.migration.MigrationStepFrom036To037\\012\\012-- Add Data Store Services table\\012\\012CREATE DOMAIN DATA_STORE_SERVICE_KIND AS VARCHAR(40) CHECK (VALUE IN ('PROCESSING', 'QUERIES'));\\012\\012CREATE TABLE DATA_STORE_SERVICES (ID TECH_ID NOT NULL, KEY VARCHAR(256) NOT NULL, LABEL VARCHAR(256) NOT NULL, KIND DATA_STORE_SERVICE_KIND NOT NULL, DATA_STORE_ID TECH_ID NOT NULL);\\012CREATE TABLE DATA_STORE_SERVICE_DATA_SET_TYPES (DATA_STORE_SERVICE_ID TECH_ID NOT NULL, DATA_SET_TYPE_ID TECH_ID NOT NULL);\\012\\012CREATE SEQUENCE DATA_STORE_SERVICES_ID_SEQ;\\012\\012ALTER TABLE DATA_STORE_SERVICES ADD CONSTRAINT DSSE_PK PRIMARY KEY(ID);\\012\\012ALTER TABLE DATA_STORE_SERVICES ADD CONSTRAINT DSSE_BK_UK UNIQUE(KEY, DATA_STORE_ID);\\012ALTER TABLE DATA_STORE_SERVICE_DATA_SET_TYPES ADD CONSTRAINT DSSDST_BK_UK UNIQUE(DATA_STORE_SERVICE_ID, DATA_SET_TYPE_ID);\\012\\012ALTER TABLE DATA_STORE_SERVICES ADD CONSTRAINT DSSE_DS_FK FOREIGN KEY (DATA_STORE_ID) REFERENCES DATA_STORES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_STORE_SERVICE_DATA_SET_TYPES ADD CONSTRAINT DSSDST_DS_FK FOREIGN KEY (DATA_STORE_SERVICE_ID) REFERENCES DATA_STORE_SERVICES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_STORE_SERVICE_DATA_SET_TYPES ADD CONSTRAINT DSSDST_DST_FK FOREIGN KEY (DATA_SET_TYPE_ID) REFERENCES DATA_SET_TYPES(ID) ON DELETE CASCADE;\\012\\012CREATE INDEX DSSE_DS_FK_I ON DATA_STORE_SERVICES (DATA_STORE_ID);\\012CREATE INDEX DSSDST_DS_FK_I ON DATA_STORE_SERVICE_DATA_SET_TYPES (DATA_STORE_SERVICE_ID);\\012CREATE INDEX DSSDST_DST_FK_I ON DATA_STORE_SERVICE_DATA_SET_TYPES (DATA_SET_TYPE_ID);\\012\\012GRANT SELECT ON SEQUENCE DATA_STORE_SERVICES_ID_SEQ TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE DATA_STORE_SERVICES TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE DATA_STORE_SERVICE_DATA_SET_TYPES TO GROUP OPENBIS_READONLY;\\012 \N 038 source/sql/postgresql/migration/migration-037-038.sql SUCCESS 2009-07-15 13:43:15.137 -- Change events table check constraint (add 'GROUP')\\012\\012ALTER TABLE events DROP CONSTRAINT evnt_et_enum_ck;\\012ALTER TABLE events ADD CONSTRAINT evnt_et_enum_ck CHECK \\012\\011\\011(entity_type IN ('ATTACHMENT', 'DATASET', 'EXPERIMENT', 'GROUP', 'MATERIAL', 'PROJECT', 'PROPERTY_TYPE', 'SAMPLE', 'VOCABULARY'));\\012 \N -039 source/sql/postgresql/migration/migration-038-039.sql SUCCESS 2009-07-28 15:30:59.303 -- Longer descriptions\\012ALTER TABLE sample_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE data_set_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE experiment_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE material_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE controlled_vocabularies ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE data_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE file_format_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE locator_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE property_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE events ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE events ALTER COLUMN reason TYPE DESCRIPTION_1000;\\012ALTER TABLE groups ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE invalidations ALTER COLUMN reason TYPE DESCRIPTION_1000;\\012\\012\\012DROP TYPE DESCRIPTION_250;\\012\\012-- Add label and description to controlled vocabularies\\012\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD COLUMN label COLUMN_LABEL;\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD COLUMN description DESCRIPTION_1000;\\012\\012-- Add authorization groups\\012\\012CREATE TABLE AUTHORIZATION_GROUPS (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, CODE CODE NOT NULL, DESCRIPTION DESCRIPTION_1000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_PK PRIMARY KEY(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012CREATE SEQUENCE AUTHORIZATION_GROUP_ID_SEQ;\\012\\012CREATE TABLE AUTHORIZATION_GROUP_PERSONS (ID TECH_ID NOT NULL, AG_ID TECH_ID NOT NULL, PERS_ID TECH_ID NOT NULL);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_PK PRIMARY KEY(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_BK_UK UNIQUE(PERS_ID,AG_ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_AG_FK FOREIGN KEY (AG_ID) REFERENCES AUTHORIZATION_GROUPS(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_PERS_FK FOREIGN KEY (PERS_ID) REFERENCES PERSONS(ID);\\012CREATE SEQUENCE AUTHORIZATION_GROUP_PERSON_ID_SEQ;\\012\\012ALTER TABLE ROLE_ASSIGNMENTS ALTER COLUMN PERS_ID_GRANTEE DROP NOT NULL;\\012ALTER TABLE ROLE_ASSIGNMENTS ADD COLUMN AG_ID_GRANTEE TECH_ID;\\012ALTER TABLE ROLE_ASSIGNMENTS DROP CONSTRAINT ROAS_GROUP_BK_UK;\\012ALTER TABLE ROLE_ASSIGNMENTS DROP CONSTRAINT ROAS_INSTANCE_BK_UK;\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_AG_PERS_ARC_CK CHECK ((AG_ID_GRANTEE IS NOT NULL AND PERS_ID_GRANTEE IS NULL) OR (AG_ID_GRANTEE IS NULL AND PERS_ID_GRANTEE IS NOT NULL));\\012CREATE INDEX ROAS_AG_FK_I_GRANTEE ON ROLE_ASSIGNMENTS (AG_ID_GRANTEE);\\012\\012CREATE UNIQUE INDEX ROAS_ROLE_GROUP_DBI_AG_PERS_UQ_I ON ROLE_ASSIGNMENTS (ROLE_CODE, COALESCE(PERS_ID_GRANTEE,-1), COALESCE(AG_ID_GRANTEE,-1), COALESCE(GROU_ID,-1), COALESCE(DBIN_ID,-1));\\012\\012GRANT SELECT ON SEQUENCE AUTHORIZATION_GROUP_ID_SEQ TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE AUTHORIZATION_GROUP_PERSON_ID_SEQ TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE AUTHORIZATION_GROUPS TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE AUTHORIZATION_GROUP_PERSONS TO GROUP OPENBIS_READONLY;\\012\\012 \N +039 source/sql/postgresql/migration/migration-038-039.sql SUCCESS 2009-07-31 15:23:28.813 -- Longer descriptions\\012ALTER TABLE sample_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE data_set_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE experiment_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE material_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE controlled_vocabularies ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE data_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE file_format_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE locator_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE property_types ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE events ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE events ALTER COLUMN reason TYPE DESCRIPTION_1000;\\012ALTER TABLE groups ALTER COLUMN description TYPE DESCRIPTION_1000;\\012ALTER TABLE invalidations ALTER COLUMN reason TYPE DESCRIPTION_1000;\\012\\012\\012DROP TYPE DESCRIPTION_250;\\012\\012-- Add label and description to controlled vocabularies\\012\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD COLUMN label COLUMN_LABEL;\\012ALTER TABLE CONTROLLED_VOCABULARY_TERMS ADD COLUMN description DESCRIPTION_1000;\\012\\012-- Add authorization groups\\012\\012CREATE TABLE AUTHORIZATION_GROUPS (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, CODE CODE NOT NULL, DESCRIPTION DESCRIPTION_1000,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, PERS_ID_REGISTERER TECH_ID NOT NULL, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_PK PRIMARY KEY(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_BK_UK UNIQUE(CODE,DBIN_ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE AUTHORIZATION_GROUPS ADD CONSTRAINT AG_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012CREATE SEQUENCE AUTHORIZATION_GROUP_ID_SEQ;\\012\\012CREATE TABLE AUTHORIZATION_GROUP_PERSONS (ID TECH_ID NOT NULL, AG_ID TECH_ID NOT NULL, PERS_ID TECH_ID NOT NULL);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_PK PRIMARY KEY(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_BK_UK UNIQUE(PERS_ID,AG_ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_AG_FK FOREIGN KEY (AG_ID) REFERENCES AUTHORIZATION_GROUPS(ID);\\012ALTER TABLE AUTHORIZATION_GROUP_PERSONS ADD CONSTRAINT AGP_PERS_FK FOREIGN KEY (PERS_ID) REFERENCES PERSONS(ID);\\012CREATE SEQUENCE AUTHORIZATION_GROUP_PERSON_ID_SEQ;\\012\\012ALTER TABLE ROLE_ASSIGNMENTS ALTER COLUMN PERS_ID_GRANTEE DROP NOT NULL;\\012ALTER TABLE ROLE_ASSIGNMENTS ADD COLUMN AG_ID_GRANTEE TECH_ID;\\012ALTER TABLE ROLE_ASSIGNMENTS DROP CONSTRAINT ROAS_GROUP_BK_UK;\\012ALTER TABLE ROLE_ASSIGNMENTS DROP CONSTRAINT ROAS_INSTANCE_BK_UK;\\012ALTER TABLE ROLE_ASSIGNMENTS ADD CONSTRAINT ROAS_AG_PERS_ARC_CK CHECK ((AG_ID_GRANTEE IS NOT NULL AND PERS_ID_GRANTEE IS NULL) OR (AG_ID_GRANTEE IS NULL AND PERS_ID_GRANTEE IS NOT NULL));\\012CREATE INDEX ROAS_AG_FK_I_GRANTEE ON ROLE_ASSIGNMENTS (AG_ID_GRANTEE);\\012\\012CREATE UNIQUE INDEX ROAS_ROLE_GROUP_DBI_AG_PERS_UQ_I ON ROLE_ASSIGNMENTS (ROLE_CODE, COALESCE(PERS_ID_GRANTEE,-1), COALESCE(AG_ID_GRANTEE,-1), COALESCE(GROU_ID,-1), COALESCE(DBIN_ID,-1));\\012\\012GRANT SELECT ON SEQUENCE AUTHORIZATION_GROUP_ID_SEQ TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON SEQUENCE AUTHORIZATION_GROUP_PERSON_ID_SEQ TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE AUTHORIZATION_GROUPS TO GROUP OPENBIS_READONLY;\\012GRANT SELECT ON TABLE AUTHORIZATION_GROUP_PERSONS TO GROUP OPENBIS_READONLY;\\012\\012-- remove group leader and parent\\012\\012ALTER TABLE groups DROP COLUMN grou_id_parent;\\012ALTER TABLE groups DROP COLUMN pers_id_leader;\\012 \N diff --git a/openbis/sourceTest/sql/postgresql/039/025=groups.tsv b/openbis/sourceTest/sql/postgresql/039/025=groups.tsv index 0cc5e0ff0a10fc61dc726c4ea55801aaeaab5738..dd9c78d91bd274ee25cac4060aaf68a7488e7001 100644 --- a/openbis/sourceTest/sql/postgresql/039/025=groups.tsv +++ b/openbis/sourceTest/sql/postgresql/039/025=groups.tsv @@ -1,2 +1,2 @@ -1 CISD 1 \N \N \N 2008-11-05 09:18:10.893+01 2 -2 TESTGROUP 1 \N 2 myDescription 2008-11-05 09:18:11.283+01 2 +1 CISD 1 \N 2008-11-05 09:18:10.893+01 2 +2 TESTGROUP 1 myDescription 2008-11-05 09:18:11.283+01 2 diff --git a/openbis/sourceTest/sql/postgresql/039/finish-039.sql b/openbis/sourceTest/sql/postgresql/039/finish-039.sql index c107e683da22f4bdc559f4bbe4daecb7044770bc..61c71768e075affac4d5b69b0839ccc654b6c826 100644 --- a/openbis/sourceTest/sql/postgresql/039/finish-039.sql +++ b/openbis/sourceTest/sql/postgresql/039/finish-039.sql @@ -190,8 +190,6 @@ CREATE INDEX expr_etpt_fk_i ON experiment_properties USING btree (etpt_id); CREATE INDEX expr_expe_fk_i ON experiment_properties USING btree (expe_id); CREATE INDEX expr_pers_fk_i ON experiment_properties USING btree (pers_id_registerer); CREATE INDEX grou_dbin_fk_i ON groups USING btree (dbin_id); -CREATE INDEX grou_grou_fk_i ON groups USING btree (grou_id_parent); -CREATE INDEX grou_pers_fk_i ON groups USING btree (pers_id_leader); CREATE INDEX grou_pers_registered_by_fk_i ON groups USING btree (pers_id_registerer); CREATE INDEX inva_pers_fk_i ON invalidations USING btree (pers_id_registerer); CREATE INDEX mapr_cvte_fk_i ON material_properties USING btree (cvte_id); @@ -368,10 +366,6 @@ ALTER TABLE ONLY file_format_types ADD CONSTRAINT ffty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id); ALTER TABLE ONLY groups ADD CONSTRAINT grou_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id); -ALTER TABLE ONLY groups - ADD CONSTRAINT grou_grou_fk FOREIGN KEY (grou_id_parent) REFERENCES groups(id); -ALTER TABLE ONLY groups - ADD CONSTRAINT grou_pers_fk_leader FOREIGN KEY (pers_id_leader) REFERENCES persons(id); ALTER TABLE ONLY groups ADD CONSTRAINT grou_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id); ALTER TABLE ONLY invalidations @@ -473,4 +467,3 @@ REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; - diff --git a/openbis/sourceTest/sql/postgresql/039/schema-039.sql b/openbis/sourceTest/sql/postgresql/039/schema-039.sql index 4b716202917edefb6e9ef7d3906b83bb4132755b..cab0b5c758c15f633a4f7736a7cbdb6d43eeb34b 100644 --- a/openbis/sourceTest/sql/postgresql/039/schema-039.sql +++ b/openbis/sourceTest/sql/postgresql/039/schema-039.sql @@ -577,8 +577,6 @@ CREATE TABLE groups ( id tech_id NOT NULL, code code NOT NULL, dbin_id tech_id NOT NULL, - grou_id_parent tech_id, - pers_id_leader tech_id, description description_1000, registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL, pers_id_registerer tech_id NOT NULL