Java tutorial
/** * The contents of this file are subject to the license and copyright * detailed in the LICENSE and NOTICE files at the root of the source * tree and available online at * * https://github.com/CILEA/dspace-cris/wiki/License */ package org.dspace.app.cris.service; import it.cilea.osd.jdyna.model.AType; import it.cilea.osd.jdyna.model.AccessLevelConstants; import it.cilea.osd.jdyna.model.Containable; import it.cilea.osd.jdyna.model.IContainable; import it.cilea.osd.jdyna.model.PropertiesDefinition; import it.cilea.osd.jdyna.web.AbstractEditTab; import it.cilea.osd.jdyna.web.AbstractTab; import it.cilea.osd.jdyna.web.Box; import it.cilea.osd.jdyna.web.IPropertyHolder; import it.cilea.osd.jdyna.web.TabService; import it.cilea.osd.jdyna.web.TypedBox; import java.lang.reflect.Method; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.dspace.app.cris.model.CrisConstants; import org.dspace.app.cris.model.ResearcherPage; import org.dspace.app.cris.model.jdyna.DecoratorRestrictedField; import org.dspace.app.cris.model.jdyna.RPPropertiesDefinition; import org.dspace.core.ConfigurationManager; public class ExtendedTabService<H extends Box<Containable>, D extends AbstractTab<H>, T extends AbstractEditTab<H, D>> extends TabService { public static Map<String, List<IContainable>> cacheStructuredMetadata = new HashMap<String, List<IContainable>>(); /** * {@inheritDoc} */ @Override @Deprecated protected void findOtherContainables(List<IContainable> containables) { findOtherContainables(containables, RPPropertiesDefinition.class.getName()); } /** * {@inheritDoc} */ @Override protected void findOtherContainables(List<IContainable> containables, String extraPrefixConfiguration) { String dspaceProperty = extraPrefixConfiguration + ".containables"; log.debug("Get from configuration additional containables object : " + dspaceProperty); String confContainables = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, dspaceProperty); if (confContainables != null && !confContainables.isEmpty()) { String[] listConfContainables = confContainables.split(","); for (String containable : listConfContainables) { DecoratorRestrictedField drf = new DecoratorRestrictedField(); drf.setReal(containable.trim()); extractIsMandatory(containable, drf); extractIsRepeatable(containable, drf); extractAccessLevel(containable, drf); containables.add(drf); } } } @Deprecated private void extractIsMandatory(String containable, DecoratorRestrictedField drf) { extractIsMandatory(containable, drf, RPPropertiesDefinition.class.getName()); } private void extractIsMandatory(String containable, DecoratorRestrictedField drf, String extraPrefixConfiguration) { String fieldsNotNullable = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, extraPrefixConfiguration + ".containables.structural.mandatory"); boolean notnullable = fieldsNotNullable.contains(containable); drf.setMandatory(notnullable); } @Deprecated private void extractAccessLevel(String containable, DecoratorRestrictedField drf) { extractAccessLevel(containable, drf, RPPropertiesDefinition.class.getName()); } private void extractAccessLevel(String containable, DecoratorRestrictedField drf, String extraPrefixConfiguration) { String fieldsAccessLevelHIGH = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, extraPrefixConfiguration + ".containables.box.staticfields.visibility.high"); boolean accessLevel = fieldsAccessLevelHIGH.contains(containable); if (accessLevel) { drf.setAccessLevel(AccessLevelConstants.HIGH_ACCESS); return; } String fieldsAccessLevelSTANDARD = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, extraPrefixConfiguration + ".containables.box.staticfields.visibility.standard"); accessLevel = fieldsAccessLevelSTANDARD.contains(containable); if (accessLevel) { drf.setAccessLevel(AccessLevelConstants.STANDARD_ACCESS); return; } String fieldsAccessLevelADMIN = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, extraPrefixConfiguration + ".containables.box.staticfields.visibility.admin"); accessLevel = fieldsAccessLevelADMIN.contains(containable); if (accessLevel) { drf.setAccessLevel(AccessLevelConstants.ADMIN_ACCESS); return; } String fieldsAccessLevelLOW = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, extraPrefixConfiguration + ".containables.box.staticfields.visibility.low"); accessLevel = fieldsAccessLevelLOW.contains(containable); if (accessLevel) { drf.setAccessLevel(AccessLevelConstants.LOW_ACCESS); return; } drf.setAccessLevel(AccessLevelConstants.ADMIN_ACCESS); } private void extractIsRepeatable(String containable, DecoratorRestrictedField drf) { Method[] methods = ResearcherPage.class.getMethods(); Method method = null; for (Method m : methods) { if (m.getName().toLowerCase().equals("get" + containable.trim().toLowerCase())) { method = m; break; } } if (method != null && method.getReturnType().isAssignableFrom(List.class)) { drf.setRepeatable(true); } else { drf.setRepeatable(false); } } @Override @Deprecated public void findOtherContainablesInBoxByConfiguration(String holderName, List<IContainable> containables) { findOtherContainablesInBoxByConfiguration(holderName, containables, "researcherpage"); } public void findOtherContainablesInBoxByConfiguration(String holderName, List<IContainable> containables, String extraPrefixConfiguration) { String boxName = StringUtils.deleteWhitespace(holderName).trim().toLowerCase(); String dspaceProperty = extraPrefixConfiguration + ".containables.box." + boxName; if (cacheStructuredMetadata.containsKey(dspaceProperty)) { containables.addAll(cacheStructuredMetadata.get(dspaceProperty)); } else { log.debug("Get from configuration additional containables object : " + dspaceProperty); String confContainables = ConfigurationManager.getProperty(CrisConstants.CFG_MODULE, dspaceProperty); List<IContainable> tmp = new LinkedList<IContainable>(); if (confContainables != null && !confContainables.isEmpty()) { String[] listConfContainables = confContainables.split(","); for (String containable : listConfContainables) { DecoratorRestrictedField drf = new DecoratorRestrictedField(); drf.setReal(containable.trim()); extractIsMandatory(containable, drf); extractIsRepeatable(containable, drf); extractAccessLevel(containable, drf); tmp.add(drf); } containables.addAll(tmp); } cacheStructuredMetadata.put(dspaceProperty, tmp); } } /** * {@inheritDoc} */ @Override public void getOtherContainableOnCreation(List<IContainable> containables) { // customization code } }