RM-2604 Create CaveatDAOInterface and caveat scheme objects.

+review RM

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/DEV/caveatmarkdatatype@114079 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Tom Page
2015-10-09 15:24:04 +00:00
parent e20467fea5
commit 4938e307ea
6 changed files with 383 additions and 3 deletions

View File

@@ -0,0 +1,56 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.module.org_alfresco_module_rm.caveat;
import org.alfresco.error.AlfrescoRuntimeException;
/**
* Generic class for any runtime exception to do with caveats.
*
* @author Tom Page
* @since 2.4.a
*/
public class CaveatException extends AlfrescoRuntimeException
{
/** serial version uid */
private static final long serialVersionUID = -1678248996340040195L;
public CaveatException(String msgId)
{
super(msgId);
}
public CaveatException(String msgId, Throwable cause)
{
super(msgId, cause);
}
/** The supplied caveat mark id was not found in the configured list. */
public static class CaveatMarkNotFound extends CaveatException
{
/** serial version uid */
private static final long serialVersionUID = -7605943340899129129L;
public CaveatMarkNotFound(String caveatMarkId)
{
super("Could not find caveat mark with id " + caveatMarkId);
}
}
}

View File

@@ -0,0 +1,38 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.module.org_alfresco_module_rm.caveat.dao;
import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.caveat.scheme.CaveatGroup;
/**
* An object responsible for providing access to the configured caveat groups and marks.
*
* @author Tom Page
* @since 2.4.a
*/
public interface CaveatDAOInterface
{
/**
* Gets a map of all the available caveat groups keyed by id.
*/
Map<String, CaveatGroup> getCaveatGroups();
}

View File

@@ -0,0 +1,138 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.module.org_alfresco_module_rm.caveat.scheme;
import java.util.List;
import com.google.common.collect.ImmutableList;
import org.alfresco.module.org_alfresco_module_rm.caveat.CaveatException.CaveatMarkNotFound;
import org.alfresco.module.org_alfresco_module_rm.util.CoreServicesExtras;
/**
* A group of related caveat marks and metadata describing how they are related.
*
* @author Tom Page
* @since 2.4.a
*/
public class CaveatGroup
{
/** The unique id of the caveat group. */
private String id;
/** The key to retrieve the I18n'ed display label for the caveat group. */
private String displayLabelKey;
/** The key to retrieve the I18n'ed description of the caveat group. */
private String descriptionKey;
/** The relationship between marks in the group. */
private CaveatGroupType caveatGroupType;
/** The marks that are contained in this group. */
private ImmutableList<CaveatMark> caveatMarks;
/**
* Constructor for the caveat group. This sets the group id of all the caveat marks that are supplied.
*
* @param id The unique id of the caveat group.
* @param displayLabelKey The key to retrieve the I18n'ed display label for the caveat group.
* @param descriptionKey The key to retrieve the I18n'ed description of the caveat group.
* @param caveatGroupType The relationship between marks in the group.
* @param caveatMarks The marks that are contained in this group.
*/
public CaveatGroup(String id, String displayLabelKey, String descriptionKey, CaveatGroupType caveatGroupType,
List<CaveatMark> caveatMarks)
{
this.id = id;
this.displayLabelKey = displayLabelKey;
this.descriptionKey = descriptionKey;
this.caveatGroupType = caveatGroupType;
this.caveatMarks = ImmutableList.copyOf(caveatMarks);
for (CaveatMark caveatMark : caveatMarks)
{
caveatMark.setGroupId(id);
}
}
/**
* Gets the unique id of the caveat group.
*/
public String getId()
{
return id;
}
/**
* Gets the I18n'ed display label for the caveat group.
*/
public String getDisplayLabel()
{
return CoreServicesExtras.getI18NMessageOrKey(displayLabelKey);
}
/**
* Gets the I18n'ed description of the caveat group.
*/
public String getDescription()
{
return CoreServicesExtras.getI18NMessageOrKey(descriptionKey);
}
/**
* Indicates how the marks in the caveat groups are related.
*/
public CaveatGroupType getCaveatGroupType()
{
return caveatGroupType;
}
/**
* Get caveat marks in ordered list with first being the most inclusive.
*/
public ImmutableList<CaveatMark> getCaveatMarks()
{
return caveatMarks;
}
/**
* Indicates whether a mark exists in this caveat group or not.
*
* @param The identifier of the mark.
*/
public boolean hasCaveatMark(String markId)
{
for (CaveatMark caveatMark : caveatMarks)
{
if (caveatMark.getId().equals(markId)) { return true; }
}
return false;
}
/**
* Get caveat mark by identifier.
*
* @param markId The identified of the mark.
* @throws CaveatMarkNotFound If the supplied id does not match a mark in this group.
*/
public CaveatMark getCaveatMark(String markId)
{
for (CaveatMark caveatMark : caveatMarks)
{
if (caveatMark.getId().equals(markId)) { return caveatMark; }
}
throw new CaveatMarkNotFound(markId);
}
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.module.org_alfresco_module_rm.caveat.scheme;
/**
* An enumeration of the type of caveat groups.
*
* @author Tom Page
* @since 2.4.a
*/
public enum CaveatGroupType
{
/** Each mark in the group implies all earlier marks also apply. */
HIERACHICAL,
/** Each mark in the group implies that no other mark applies. */
EXCLUSIVE,
/** Each mark in the group has no bearing on the applicability of any other mark. */
INDEPENDENT
}

View File

@@ -0,0 +1,97 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.module.org_alfresco_module_rm.caveat.scheme;
import org.alfresco.module.org_alfresco_module_rm.util.CoreServicesExtras;
/**
* A marking from a caveat group that can be applied to content to restrict access to users who have a corresponding
* mark.
*
* @author Tom Page
* @since 2.4.a
*/
public class CaveatMark
{
/** The id of the group that this mark belongs to. */
private String groupId;
/** The id for this mark. */
private String id;
/** The I18N key for the display label of this mark. */
private String displayLabelKey;
/**
* Constructor for the caveat group.
*
* @param groupId The id of the group that this mark belongs to.
* @param id The id for this mark.
* @param displayLabelKey The I18N key for the display label of this mark.
*/
public CaveatMark(String groupId, String id, String displayLabelKey)
{
this.groupId = groupId;
this.id = id;
this.displayLabelKey = displayLabelKey;
}
/**
* Constructor for a caveat group that does not yet belong to a group.
*
* @param id The id for this mark.
* @param displayLabelKey The I18N key for the display label of this mark.
*/
public CaveatMark(String id, String displayLabelKey)
{
this.id = id;
this.displayLabelKey = displayLabelKey;
}
/**
* Get the identifier for the group that this mark belongs to.
*/
public String getGroupId()
{
return groupId;
}
/**
* Set the identifier of the group that this mark belongs to.
*/
public void setGroupId(String groupId)
{
this.groupId = groupId;
}
/**
* Get the identifier for the mark.
*/
public String getId()
{
return id;
}
/**
* Get the display label for the mark.
*/
public String getDisplayLabel()
{
return CoreServicesExtras.getI18NMessageOrKey(displayLabelKey);
}
}

View File

@@ -19,6 +19,10 @@
package org.alfresco.module.org_alfresco_module_rm.util;
import static org.alfresco.util.collections.CollectionUtils.filterKeys;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import java.io.Serializable;
import java.util.Map;
import org.alfresco.service.cmr.dictionary.AspectDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryException;
@@ -28,9 +32,7 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.collections.Function;
import java.io.Serializable;
import java.util.Map;
import org.springframework.extensions.surf.util.I18NUtil;
/**
* Provides additional methods of general use that could (in principle) be moved to the core services.
@@ -82,4 +84,17 @@ public class CoreServicesExtras
nodeService.addProperties(to, relevantPropVals);
return relevantPropVals;
}
/**
* Use the {@link I18NUtil} to look up a key and return the localised message. If no entry for the current language
* is found then return the key.
*
* @param i18nKey The message key.
* @return The message if one exists, or the key. Never returns null (unless null is supplied as the key).
*/
public static String getI18NMessageOrKey(String i18nKey)
{
String message = I18NUtil.getMessage(i18nKey);
return (isNotBlank(message) ? message : i18nKey);
}
}