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.model; import it.cilea.osd.common.core.TimeStampInfo; import it.cilea.osd.jdyna.model.ANestedPropertiesDefinition; import it.cilea.osd.jdyna.model.ANestedProperty; import it.cilea.osd.jdyna.model.ATypeNestedObject; import it.cilea.osd.jdyna.model.AValue; import it.cilea.osd.jdyna.model.PropertiesDefinition; import it.cilea.osd.jdyna.model.Property; import java.beans.PropertyEditor; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Set; import javax.persistence.Column; import javax.persistence.MappedSuperclass; import org.apache.commons.lang.StringUtils; import org.dspace.app.cris.model.export.ExportConstants; import org.dspace.app.cris.model.jdyna.ACrisNestedObject; import org.dspace.app.cris.util.ResearcherPageUtils; import org.dspace.authorize.AuthorizeException; import org.dspace.browse.BrowsableDSpaceObject; import org.dspace.content.DCValue; import org.dspace.content.DSpaceObject; import org.dspace.content.authority.Choices; @MappedSuperclass public abstract class ACrisObject<P extends Property<TP>, TP extends PropertiesDefinition, NP extends ANestedProperty<NTP>, NTP extends ANestedPropertiesDefinition, ACNO extends ACrisNestedObject<NP, NTP, P, TP>, ATNO extends ATypeNestedObject<NTP>> extends DSpaceObject implements ICrisObject<P, TP>, BrowsableDSpaceObject, IExportableDynamicObject<TP, P, ACrisObject<P, TP, NP, NTP, ACNO, ATNO>> { /** Cris internal unique identifier, must be null */ @Column(nullable = true, unique = true) private String sourceID; /** Cris public unique identifier, must be null */ @Column(nullable = true, unique = true) private String crisID; private Boolean status; @Column(nullable = false, unique = true) private String uuid; public ACrisObject() { this.status = false; } public Boolean getStatus() { return status; } public void setStatus(Boolean status) { this.status = status; } public void setUuid(String uuid) { this.uuid = uuid; } public String getUuid() { return uuid; } public void setSourceID(String sourceID) { this.sourceID = sourceID; } public String getSourceID() { return sourceID; } public abstract String getPublicPath(); public abstract String getAuthorityPrefix(); @Override public String getHandle() { return uuid; } @Override public int getID() { return getId() != null ? getId().intValue() : -1; } @Override public boolean isArchived() { return getStatus() != null ? getStatus() : false; } @Override public boolean isWithdrawn() { return getStatus() != null ? !getStatus() : false; } /** * Convenience method to get data from ResearcherPage by a string. For any * existent field name the method must return the relative value (i.e * getMetadata("fullName") is equivalent to getFullName()) but the method * always return a list (with 0, 1 or more elements). For dynamic field it * returns the value of the dynamic field with the shorter name equals to * the argument. Only public values are returned! * * * @param dcField * the field (not null) to retrieve the value * @return a list of 0, 1 or more values */ public List<String> getMetadata(String field) { List<String> result = new ArrayList(); List<P> dyna = getAnagrafica4view().get(field); for (P prop : dyna) { if (prop.getVisibility() == VisibilityConstants.PUBLIC) result.add(prop.toString()); } return result; } @Override public DCValue[] getMetadata(String schema, String element, String qualifier, String lang) { List values = new ArrayList(); String authority = null; if ("crisdo".equals(schema) && "name".equals(element)) { values.add(getName()); } else if (!schema.equalsIgnoreCase("cris" + this.getPublicPath())) { return new DCValue[0]; } else { element = getCompatibleJDynAShortName(this, element); List<P> proprieties = this.getAnagrafica4view().get(element); if (proprieties != null) { for (P prop : proprieties) { Object val = prop.getObject(); if (StringUtils.isNotEmpty(qualifier) && val instanceof ACrisObject) { authority = ResearcherPageUtils.getPersistentIdentifier((ACrisObject) val); qualifier = getCompatibleJDynAShortName((ACrisObject) val, qualifier); List pointProps = (List) ((ACrisObject) val).getAnagrafica4view().get(qualifier); if (pointProps != null && pointProps.size() > 0) { for (Object pprop : pointProps) { values.add(((Property) pprop).getObject()); } } } else if (val instanceof ACrisObject) { authority = ResearcherPageUtils.getPersistentIdentifier((ACrisObject) val); values.add(((ACrisObject) val).getName()); } else { PropertyEditor propertyEditor = prop.getTypo().getRendering().getPropertyEditor(null); propertyEditor.setValue(val); values.add(propertyEditor.getAsText()); } } } } DCValue[] result = new DCValue[values.size()]; for (int idx = 0; idx < values.size(); idx++) { result[idx] = new DCValue(); result[idx].schema = schema; result[idx].element = element; result[idx].qualifier = qualifier; result[idx].authority = authority; result[idx].confidence = StringUtils.isNotEmpty(authority) ? Choices.CF_ACCEPTED : Choices.CF_UNSET; result[idx].value = values.get(idx).toString(); } return result; } private String getCompatibleJDynAShortName(ACrisObject aCrisObject, String element) { Set<String> keys = aCrisObject.getAnagrafica4view().keySet(); if (!keys.contains(element)) { // DSpace is case insensitive, metadata are all lowercase for (String key : keys) { if (key.replaceAll("[\\-_]", "").equalsIgnoreCase(element)) { return key; } } } return element; } @Override public String toString() { return getName(); } public String getCrisID() { return crisID; } public void setCrisID(String crisID) { this.crisID = crisID; } abstract public TimeStampInfo getTimeStampInfo(); public String getNamePublicIDAttribute() { return ExportConstants.NAME_PUBLICID_ATTRIBUTE; } public String getValuePublicIDAttribute() { return "" + this.getId(); } public String getNameIDAttribute() { return ExportConstants.NAME_ID_ATTRIBUTE; } public String getValueIDAttribute() { if (this.getUuid() == null) { return ""; } return "" + this.getUuid().toString(); } public String getNameBusinessIDAttribute() { return ExportConstants.NAME_BUSINESSID_ATTRIBUTE; } public String getValueBusinessIDAttribute() { return this.getSourceID(); } public String getNameTypeIDAttribute() { return ExportConstants.NAME_TYPE_ATTRIBUTE; } public String getValueTypeIDAttribute() { return "" + getType(); } public String getNameSingleRowElement() { return ExportConstants.ELEMENT_SINGLEROW; } public ACrisObject<P, TP, NP, NTP, ACNO, ATNO> getAnagraficaSupport() { return this; } public abstract Class<ACNO> getClassNested(); public abstract Class<ATNO> getClassTypeNested(); @Override public void update() throws SQLException, AuthorizeException { // TODO Auto-generated method stub } @Override public void updateLastModified() { // TODO Auto-generated method stub } }