/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/content/trunk/content-tool/tool/src/java/org/sakaiproject/content/tool/ResourcesMetadata.java $
* $Id: ResourcesMetadata.java 109724 2012-06-27 04:22:36Z steve.swinsburg@gmail.com $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2007, 2008 The Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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
package org.sakaiproject.content.tool;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.regex.Pattern;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.content.api.ContentHostingHandlerResolver;
import org.sakaiproject.util.ResourceLoader;
import org.sakaiproject.util.Validator;
/**
* The class represents metadata properties.
*/
public class ResourcesMetadata
{
/** Resource bundle using current language locale */
private ResourceLoader rb = new ResourceLoader("content");
static final Log logger = LogFactory.getLog(ResourcesMetadata.class);
public static final String WIDGET_STRING = "string";
public static final String WIDGET_TEXTAREA = "textarea";
public static final String WIDGET_BOOLEAN = "boolean";
public static final String WIDGET_INTEGER = "integer";
public static final String WIDGET_DOUBLE = "double";
public static final String WIDGET_DATE = "date";
public static final String WIDGET_TIME = "time";
public static final String WIDGET_DATETIME = "datetime";
public static final String WIDGET_ANYURI = "anyURI";
public static final String WIDGET_ENUM = "enumeration";
public static final String WIDGET_NESTED = "nested";
public static final String WIDGET_WYSIWYG = "wysiwig-editor";
public static final String WIDGET_DURATION = "duration";
public static final String WIDGET_DROPDOWN = "dropdown";
public static final String XSD_STRING = "string";
public static final String XSD_BOOLEAN = "boolean";
public static final String XSD_INTEGER = "integer";
public static final String XSD_FLOAT = "float";
public static final String XSD_DOUBLE = "double";
public static final String XSD_DATE = "date";
public static final String XSD_TIME = "time";
public static final String XSD_DATETIME = "dateTime";
public static final String XSD_DURATION = "duration";
public static final String XSD_ANYURI = "anyURI";
public static final String XSD_NORMALIZED_STRING = "normalizedString";
public static final String CLASS_SAKAI_RESOURCE_NAMESPACE = "http://sakaiproject.org/metadata#";
public static final String CLASS_SAKAI_RESOURCE_LOCALNAME = "Resource";
public static final String CLASS_SAKAI_RESOURCE_LABEL = "Resource";
public static final String NAMESPACE_DC = "http://purl.org/dc/elements/1.1/";
public static final String NAMESPACE_DC_ABBREV = "dc:";
public static final String NAMESPACE_DCTERMS = "http://purl.org/dc/terms/";
public static final String NAMESPACE_DCTERMS_ABBREV = "dcterms:";
public static final String NAMESPACE_XSD = "http://www.w3.org/2001/XMLSchema#";
public static final String NAMESPACE_XSD_ABBREV = "xs:";
public static final String NAMESPACE_LOM = "http://ltsc.ieee.org/xsd/lomv1.0/";
public static final String NAMESPACE_LOM_ABBREV = "lom:";
protected static AtomicInteger namespaceNumber = new AtomicInteger(0);
public static final String PROPERTY_NAME_DC_TITLE = "title";
public static final String PROPERTY_LABEL_DC_TITLE = "label.dc_title";
public static final String PROPERTY_DESCRIPTION_DC_TITLE = "descr.dc_title";
public static final String PROPERTY_TYPE_DC_TITLE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_TITLE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_TITLE
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_TITLE,
PROPERTY_LABEL_DC_TITLE,
PROPERTY_DESCRIPTION_DC_TITLE,
PROPERTY_TYPE_DC_TITLE,
PROPERTY_WIDGET_DC_TITLE
);
public static final String PROPERTY_NAME_DC_ALTERNATIVE = "alternative";
public static final String PROPERTY_LABEL_DC_ALTERNATIVE = "label.dc_alt";
public static final String PROPERTY_DESCRIPTION_DC_ALTERNATIVE = "descr.dc_alt";
public static final String PROPERTY_TYPE_DC_ALTERNATIVE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_ALTERNATIVE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_ALTERNATIVE
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_ALTERNATIVE,
PROPERTY_LABEL_DC_ALTERNATIVE,
PROPERTY_DESCRIPTION_DC_ALTERNATIVE,
PROPERTY_TYPE_DC_ALTERNATIVE,
PROPERTY_WIDGET_DC_ALTERNATIVE
);
public static final String PROPERTY_NAME_DC_CREATOR = "creator";
public static final String PROPERTY_LABEL_DC_CREATOR = "label.dc_creator";
public static final String PROPERTY_DESCRIPTION_DC_CREATOR = "descr.dc_creator";
public static final String PROPERTY_TYPE_DC_CREATOR = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_CREATOR = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_CREATOR
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_CREATOR,
PROPERTY_LABEL_DC_CREATOR,
PROPERTY_DESCRIPTION_DC_CREATOR,
PROPERTY_TYPE_DC_CREATOR,
PROPERTY_WIDGET_DC_CREATOR
);
public static final String PROPERTY_NAME_DC_SUBJECT = "subject";
public static final String PROPERTY_LABEL_DC_SUBJECT = "label.dc_subject";
public static final String PROPERTY_DESCRIPTION_DC_SUBJECT = "descr.dc_subject";
public static final String PROPERTY_TYPE_DC_SUBJECT = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_SUBJECT = WIDGET_TEXTAREA;
public static final ResourcesMetadata PROPERTY_DC_SUBJECT
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_SUBJECT,
PROPERTY_LABEL_DC_SUBJECT,
PROPERTY_DESCRIPTION_DC_SUBJECT,
PROPERTY_TYPE_DC_SUBJECT,
PROPERTY_WIDGET_DC_SUBJECT
);
public static final String PROPERTY_NAME_DC_DESCRIPTION = "description";
public static final String PROPERTY_LABEL_DC_DESCRIPTION = "label.dc_descr";
public static final String PROPERTY_DESCRIPTION_DC_DESCRIPTION = "descr.dc_descr";
public static final String PROPERTY_TYPE_DC_DESCRIPTION = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_DESCRIPTION = WIDGET_TEXTAREA;
public static final ResourcesMetadata PROPERTY_DC_DESCRIPTION
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_DESCRIPTION,
PROPERTY_LABEL_DC_DESCRIPTION,
PROPERTY_DESCRIPTION_DC_DESCRIPTION,
PROPERTY_TYPE_DC_DESCRIPTION,
PROPERTY_WIDGET_DC_DESCRIPTION
);
public static final String PROPERTY_NAME_DC_PUBLISHER = "publisher";
public static final String PROPERTY_LABEL_DC_PUBLISHER = "label.dc_publisher";
public static final String PROPERTY_DESCRIPTION_DC_PUBLISHER = "descr.dc_publisher";
public static final String PROPERTY_TYPE_DC_PUBLISHER = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_PUBLISHER = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_PUBLISHER
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_PUBLISHER,
PROPERTY_LABEL_DC_PUBLISHER,
PROPERTY_DESCRIPTION_DC_PUBLISHER,
PROPERTY_TYPE_DC_PUBLISHER,
PROPERTY_WIDGET_DC_PUBLISHER
);
public static final String PROPERTY_NAME_DC_CONTRIBUTOR = "contributor";
public static final String PROPERTY_LABEL_DC_CONTRIBUTOR = "label.dc_contributor";
public static final String PROPERTY_DESCRIPTION_DC_CONTRIBUTOR = "descr.dc_contributor";
public static final String PROPERTY_TYPE_DC_CONTRIBUTOR = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_CONTRIBUTOR = WIDGET_TEXTAREA;
public static final ResourcesMetadata PROPERTY_DC_CONTRIBUTOR
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_CONTRIBUTOR,
PROPERTY_LABEL_DC_CONTRIBUTOR,
PROPERTY_DESCRIPTION_DC_CONTRIBUTOR,
PROPERTY_TYPE_DC_CONTRIBUTOR,
PROPERTY_WIDGET_DC_CONTRIBUTOR
);
public static final String PROPERTY_NAME_DC_TYPE = "type";
public static final String PROPERTY_LABEL_DC_TYPE = "label.dc_type";
public static final String PROPERTY_DESCRIPTION_DC_TYPE = "descr.dc_type";
public static final String PROPERTY_TYPE_DC_TYPE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_TYPE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_TYPE
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_TYPE,
PROPERTY_LABEL_DC_TYPE,
PROPERTY_DESCRIPTION_DC_TYPE,
PROPERTY_TYPE_DC_TYPE,
PROPERTY_WIDGET_DC_TYPE
);
public static final String PROPERTY_NAME_DC_FORMAT = "format";
public static final String PROPERTY_LABEL_DC_FORMAT = "label.dc_format";
public static final String PROPERTY_DESCRIPTION_DC_FORMAT = "descr.dc_format";
public static final String PROPERTY_TYPE_DC_FORMAT = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_FORMAT = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_FORMAT
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_FORMAT,
PROPERTY_LABEL_DC_FORMAT,
PROPERTY_DESCRIPTION_DC_FORMAT,
PROPERTY_TYPE_DC_FORMAT,
PROPERTY_WIDGET_DC_FORMAT
);
public static final String PROPERTY_NAME_DC_IDENTIFIER = "identifier";
public static final String PROPERTY_LABEL_DC_IDENTIFIER = "label.dc_id";
public static final String PROPERTY_DESCRIPTION_DC_IDENTIFIER = "descr.dc_id";
public static final String PROPERTY_TYPE_DC_IDENTIFIER = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_IDENTIFIER = WIDGET_STRING; // WIDGET_ANYURI;
public static final ResourcesMetadata PROPERTY_DC_IDENTIFIER
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_IDENTIFIER,
PROPERTY_LABEL_DC_IDENTIFIER,
PROPERTY_DESCRIPTION_DC_IDENTIFIER,
PROPERTY_TYPE_DC_IDENTIFIER,
PROPERTY_WIDGET_DC_IDENTIFIER
);
public static final String PROPERTY_NAME_DC_SOURCE = "source";
public static final String PROPERTY_LABEL_DC_SOURCE = "label.dc_source";
public static final String PROPERTY_DESCRIPTION_DC_SOURCE = "descr.dc_source";
public static final String PROPERTY_TYPE_DC_SOURCE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_SOURCE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_SOURCE
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_SOURCE,
PROPERTY_LABEL_DC_SOURCE,
PROPERTY_DESCRIPTION_DC_SOURCE,
PROPERTY_TYPE_DC_SOURCE,
PROPERTY_WIDGET_DC_SOURCE
);
public static final String PROPERTY_NAME_DC_LANGUAGE = "language";
public static final String PROPERTY_LABEL_DC_LANGUAGE = "label.dc_lang";
public static final String PROPERTY_DESCRIPTION_DC_LANGUAGE = "descr.dc_lang";
public static final String PROPERTY_TYPE_DC_LANGUAGE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_LANGUAGE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_LANGUAGE
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_LANGUAGE,
PROPERTY_LABEL_DC_LANGUAGE,
PROPERTY_DESCRIPTION_DC_LANGUAGE,
PROPERTY_TYPE_DC_LANGUAGE,
PROPERTY_WIDGET_DC_LANGUAGE
);
public static final String PROPERTY_NAME_DC_COVERAGE = "coverage";
public static final String PROPERTY_LABEL_DC_COVERAGE = "label.dc_coverage";
public static final String PROPERTY_DESCRIPTION_DC_COVERAGE = "descr.dc_coverage";
public static final String PROPERTY_TYPE_DC_COVERAGE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_COVERAGE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_COVERAGE
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_COVERAGE,
PROPERTY_LABEL_DC_COVERAGE,
PROPERTY_DESCRIPTION_DC_COVERAGE,
PROPERTY_TYPE_DC_COVERAGE,
PROPERTY_WIDGET_DC_COVERAGE
);
public static final String PROPERTY_NAME_DC_RIGHTS = "rights";
public static final String PROPERTY_LABEL_DC_RIGHTS = "label.dc_rights";
public static final String PROPERTY_DESCRIPTION_DC_RIGHTS = "descr.dc_rights";
public static final String PROPERTY_TYPE_DC_RIGHTS = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_RIGHTS = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_RIGHTS
= new ResourcesMetadata(
NAMESPACE_DC,
PROPERTY_NAME_DC_RIGHTS,
PROPERTY_LABEL_DC_RIGHTS,
PROPERTY_DESCRIPTION_DC_RIGHTS,
PROPERTY_TYPE_DC_RIGHTS,
PROPERTY_WIDGET_DC_RIGHTS
);
public static final String PROPERTY_NAME_DC_AUDIENCE = "audience";
public static final String PROPERTY_LABEL_DC_AUDIENCE = "label.dc_audience";
public static final String PROPERTY_DESCRIPTION_DC_AUDIENCE = "descr.dc_audience";
public static final String PROPERTY_TYPE_DC_AUDIENCE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_AUDIENCE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_AUDIENCE
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_AUDIENCE,
PROPERTY_LABEL_DC_AUDIENCE,
PROPERTY_DESCRIPTION_DC_AUDIENCE,
PROPERTY_TYPE_DC_AUDIENCE,
PROPERTY_WIDGET_DC_AUDIENCE
);
public static final String PROPERTY_NAME_DC_TABLEOFCONTENTS = "tableOfContents";
public static final String PROPERTY_LABEL_DC_TABLEOFCONTENTS = "label.dc_toc";
public static final String PROPERTY_DESCRIPTION_DC_TABLEOFCONTENTS = "descr.dc_toc";
public static final String PROPERTY_TYPE_DC_TABLEOFCONTENTS = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_TABLEOFCONTENTS = WIDGET_TEXTAREA;
public static final ResourcesMetadata PROPERTY_DC_TABLEOFCONTENTS
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_TABLEOFCONTENTS,
PROPERTY_LABEL_DC_TABLEOFCONTENTS,
PROPERTY_DESCRIPTION_DC_TABLEOFCONTENTS,
PROPERTY_TYPE_DC_TABLEOFCONTENTS,
PROPERTY_WIDGET_DC_TABLEOFCONTENTS
);
public static final String PROPERTY_NAME_DC_ABSTRACT = "abstract";
public static final String PROPERTY_LABEL_DC_ABSTRACT = "label.dc_abstract";
public static final String PROPERTY_DESCRIPTION_DC_ABSTRACT = "descr.dc_abstract";
public static final String PROPERTY_TYPE_DC_ABSTRACT = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_ABSTRACT = WIDGET_TEXTAREA;
public static final ResourcesMetadata PROPERTY_DC_ABSTRACT
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_ABSTRACT,
PROPERTY_LABEL_DC_ABSTRACT,
PROPERTY_DESCRIPTION_DC_ABSTRACT,
PROPERTY_TYPE_DC_ABSTRACT,
PROPERTY_WIDGET_DC_ABSTRACT
);
public static final String PROPERTY_NAME_DC_CREATED = "created";
public static final String PROPERTY_LABEL_DC_CREATED = "label.dc_created";
public static final String PROPERTY_DESCRIPTION_DC_CREATED = "descr.dc_created";
public static final String PROPERTY_TYPE_DC_CREATED = NAMESPACE_XSD + XSD_NORMALIZED_STRING; //XSD_DATE;
public static final String PROPERTY_WIDGET_DC_CREATED = WIDGET_STRING; // WIDGET_DATE;
public static final ResourcesMetadata PROPERTY_DC_CREATED
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_CREATED,
PROPERTY_LABEL_DC_CREATED,
PROPERTY_DESCRIPTION_DC_CREATED,
PROPERTY_TYPE_DC_CREATED,
PROPERTY_WIDGET_DC_CREATED
);
public static final String PROPERTY_NAME_DC_ISSUED = "issued";
public static final String PROPERTY_LABEL_DC_ISSUED = "label.dc_issued";
public static final String PROPERTY_DESCRIPTION_DC_ISSUED = "descr.dc_issued";
public static final String PROPERTY_TYPE_DC_ISSUED = NAMESPACE_XSD + XSD_NORMALIZED_STRING; //XSD_DATE;
public static final String PROPERTY_WIDGET_DC_ISSUED = WIDGET_STRING; // WIDGET_DATE;
public static final ResourcesMetadata PROPERTY_DC_ISSUED
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_ISSUED,
PROPERTY_LABEL_DC_ISSUED,
PROPERTY_DESCRIPTION_DC_ISSUED,
PROPERTY_TYPE_DC_ISSUED,
PROPERTY_WIDGET_DC_ISSUED
);
public static final String PROPERTY_NAME_DC_MODIFIED = "modified";
public static final String PROPERTY_LABEL_DC_MODIFIED = "label.dc_modified";
public static final String PROPERTY_DESCRIPTION_DC_MODIFIED = "descr.dc_modified";
public static final String PROPERTY_TYPE_DC_MODIFIED = NAMESPACE_XSD + XSD_NORMALIZED_STRING; //XSD_DATE;
public static final String PROPERTY_WIDGET_DC_MODIFIED = WIDGET_STRING; // WIDGET_DATE;
public static final ResourcesMetadata PROPERTY_DC_MODIFIED
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_MODIFIED,
PROPERTY_LABEL_DC_MODIFIED,
PROPERTY_DESCRIPTION_DC_MODIFIED,
PROPERTY_TYPE_DC_MODIFIED,
PROPERTY_WIDGET_DC_MODIFIED
);
public static final String PROPERTY_NAME_DC_EDULEVEL = "educationLevel";
public static final String PROPERTY_LABEL_DC_EDULEVEL = "label.dc_edlevel";
public static final String PROPERTY_DESCRIPTION_DC_EDULEVEL = "descr.dc_edlevel";
public static final String PROPERTY_TYPE_DC_EDULEVEL = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_DC_EDULEVEL = WIDGET_TEXTAREA;
public static final ResourcesMetadata PROPERTY_DC_EDULEVEL
= new ResourcesMetadata(
NAMESPACE_DCTERMS,
PROPERTY_NAME_DC_EDULEVEL,
PROPERTY_LABEL_DC_EDULEVEL,
PROPERTY_DESCRIPTION_DC_EDULEVEL,
PROPERTY_TYPE_DC_EDULEVEL,
PROPERTY_WIDGET_DC_EDULEVEL
);
/* File System mount points */
public static final String PROPERTY_NAME_FSMOUNT_NAMESPACE = ContentHostingHandlerResolver.CHH_BEAN_NAME.split(":")[0];
public static final String PROPERTY_NAME_FSMOUNT_ACTIVE = ContentHostingHandlerResolver.CHH_BEAN_NAME.split(":")[1];
public static final String PROPERTY_LABEL_FSMOUNT_ACTIVE = "label.fsmount_active";
public static final String PROPERTY_DESCRIPTION_FSMOUNT_ACTIVE = "descr.fsmount_active";
// TYPE should be a BOOLEAN but that does not appear to be implemented -- miserable.
// Instead, we store a string and ask users to type "YES" or "NO". Yes, this sucks.
public static final String PROPERTY_TYPE_FSMOUNT_ACTIVE = NAMESPACE_XSD + XSD_STRING;
public static final String PROPERTY_WIDGET_FSMOUNT_ACTIVE = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_FSMOUNT_ACTIVE
= new ResourcesMetadata(
PROPERTY_NAME_FSMOUNT_NAMESPACE+":",
PROPERTY_NAME_FSMOUNT_ACTIVE,
PROPERTY_LABEL_FSMOUNT_ACTIVE,
PROPERTY_DESCRIPTION_FSMOUNT_ACTIVE,
PROPERTY_TYPE_FSMOUNT_ACTIVE,
PROPERTY_WIDGET_FSMOUNT_ACTIVE
);
public static final ResourcesMetadata PROPERTY_DC_BOOLEAN
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_BOOLEAN,
WIDGET_BOOLEAN,
"Test " + WIDGET_BOOLEAN,
NAMESPACE_XSD + XSD_BOOLEAN,
WIDGET_BOOLEAN
);
public static final ResourcesMetadata PROPERTY_DC_DATE
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_DATE,
WIDGET_DATE,
"Test " + WIDGET_DATE,
NAMESPACE_XSD + XSD_DATE,
WIDGET_DATE
);
public static final ResourcesMetadata PROPERTY_DC_TIME
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_TIME,
WIDGET_TIME,
"Test " + WIDGET_TIME,
NAMESPACE_XSD + XSD_TIME,
WIDGET_TIME
);
public static final ResourcesMetadata PROPERTY_DC_DATETIME
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_DATETIME,
WIDGET_DATETIME,
"Test " + WIDGET_DATETIME,
NAMESPACE_XSD + XSD_DATETIME,
WIDGET_DATETIME
);
public static final ResourcesMetadata PROPERTY_DC_INTEGER
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_INTEGER,
WIDGET_INTEGER,
"Test " + WIDGET_INTEGER,
NAMESPACE_XSD + XSD_INTEGER,
WIDGET_INTEGER
);
public static final ResourcesMetadata PROPERTY_DC_DOUBLE
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_DOUBLE,
WIDGET_DOUBLE,
"Test " + WIDGET_DOUBLE,
NAMESPACE_XSD + XSD_DOUBLE,
WIDGET_DOUBLE
);
public static final ResourcesMetadata PROPERTY_DC_ANYURI
= new ResourcesMetadata(
NAMESPACE_XSD,
XSD_ANYURI,
WIDGET_ANYURI,
"Test " + WIDGET_ANYURI,
NAMESPACE_XSD + XSD_ANYURI,
WIDGET_ANYURI
);
/* LOM role */
public static final ResourcesMetadata PROPERTY_LOM_ROLE
= new ResourcesMetadata(
NAMESPACE_LOM,
"role",
"label.lom_role",
"descr.lom_role",
NAMESPACE_XSD + XSD_STRING,
WIDGET_STRING
);
/* LOM coverage */
public static final ResourcesMetadata PROPERTY_LOM_COVERAGE
= new ResourcesMetadata(
NAMESPACE_LOM,
"coverage",
"label.lom_coverage",
"descr.lom_coverage",
NAMESPACE_XSD + XSD_STRING,
WIDGET_STRING
);
/* LOM status */
public static final ResourcesMetadata PROPERTY_LOM_STATUS
= new ResourcesMetadata(
NAMESPACE_LOM,
"status",
"label.lom_status",
"descr.lom_status",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM duration */
public static final ResourcesMetadata PROPERTY_LOM_DURATION
= new ResourcesMetadata(
NAMESPACE_LOM,
"duration",
"label.lom_duration",
"descr.lom_duration",
NAMESPACE_XSD + XSD_TIME,
WIDGET_DURATION
);
/* LOM engagement type */
public static final ResourcesMetadata PROPERTY_LOM_ENGAGEMENT_TYPE
= new ResourcesMetadata(
NAMESPACE_LOM,
"engagement",
"label.lom_engagement",
"descr.lom_engagement",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM learning resource type */
public static final ResourcesMetadata PROPERTY_LOM_LEARNING_RESOURCE_TYPE
= new ResourcesMetadata(
NAMESPACE_LOM,
"learning_resource_type",
"label.lom_learning_resource_type",
"descr.lom_learning_resource_type",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM interactivity level */
public static final ResourcesMetadata PROPERTY_LOM_INTERACTIVITY_LEVEL
= new ResourcesMetadata(
NAMESPACE_LOM,
"interactivity_level",
"label.lom_interactivity_level",
"descr.lom_interactivity_level",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM context level */
public static final ResourcesMetadata PROPERTY_LOM_CONTEXT_LEVEL
= new ResourcesMetadata(
NAMESPACE_LOM,
"context_level",
"label.lom_context_level",
"descr.lom_context_level",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM difficulty */
public static final ResourcesMetadata PROPERTY_LOM_DIFFICULTY
= new ResourcesMetadata(
NAMESPACE_LOM,
"difficulty",
"label.lom_difficulty",
"descr.lom_difficulty",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM learning time */
public static final ResourcesMetadata PROPERTY_LOM_LEARNING_TIME
= new ResourcesMetadata(
NAMESPACE_LOM,
"learning_time",
"label.lom_learning_time",
"descr.lom_learning_time",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DURATION
);
/* LOM assumed knowledge */
public static final ResourcesMetadata PROPERTY_LOM_ASSUMED_KNOWLEDGE
= new ResourcesMetadata(
NAMESPACE_LOM,
"assumed_knowledge",
"label.lom_assumed_knowledge",
"descr.lom_assumed_knowledge",
NAMESPACE_XSD + XSD_STRING,
WIDGET_TEXTAREA
);
/* LOM tech req */
public static final ResourcesMetadata PROPERTY_LOM_TECHNICAL_REQUIREMENTS
= new ResourcesMetadata(
NAMESPACE_LOM,
"technical_requirements",
"label.lom_technical_requirements",
"descr.lom_technical_requirements",
NAMESPACE_XSD + XSD_STRING,
WIDGET_TEXTAREA
);
/* LOM install remarks */
public static final ResourcesMetadata PROPERTY_LOM_INSTALL_REMARKS
= new ResourcesMetadata(
NAMESPACE_LOM,
"install_remarks",
"label.lom_install_remarks",
"descr.lom_install_remarks",
NAMESPACE_XSD + XSD_STRING,
WIDGET_TEXTAREA
);
/* LOM other requirements */
public static final ResourcesMetadata PROPERTY_LOM_OTHER_REQUIREMENTS
= new ResourcesMetadata(
NAMESPACE_LOM,
"other_requirements",
"label.lom_other_requirements",
"descr.lom_other_requirements",
NAMESPACE_XSD + XSD_STRING,
WIDGET_TEXTAREA
);
/* LOM granularity level */
public static final ResourcesMetadata PROPERTY_LOM_GRANULARITY_LEVEL
= new ResourcesMetadata(
NAMESPACE_LOM,
"granularity_level",
"label.lom_granularity_level",
"descr.lom_granularity_level",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM structure */
public static final ResourcesMetadata PROPERTY_LOM_STRUCTURE
= new ResourcesMetadata(
NAMESPACE_LOM,
"structure",
"label.lom_structure",
"descr.lom_structure",
NAMESPACE_XSD + XSD_STRING,
WIDGET_DROPDOWN
);
/* LOM relation */
public static final ResourcesMetadata PROPERTY_LOM_RELATION
= new ResourcesMetadata(
NAMESPACE_LOM,
"relation",
"label.lom_relation",
"descr.lom_relation",
NAMESPACE_XSD + XSD_STRING,
WIDGET_TEXTAREA
);
/* LOM reviewer */
public static final ResourcesMetadata PROPERTY_LOM_REVIEWER
= new ResourcesMetadata(
NAMESPACE_LOM,
"reviewer",
"label.lom_reviewer",
"descr.lom_reviewer",
NAMESPACE_XSD + XSD_STRING,
WIDGET_STRING
);
/* LOM review date */
public static final ResourcesMetadata PROPERTY_LOM_REVIEW_DATE
= new ResourcesMetadata(
NAMESPACE_LOM,
"review_date",
"label.lom_review_date",
"descr.lom_review_date",
NAMESPACE_XSD + XSD_STRING,
WIDGET_STRING
);
/* LOM review comments */
public static final ResourcesMetadata PROPERTY_LOM_REVIEW_COMMENTS
= new ResourcesMetadata(
NAMESPACE_LOM,
"review_comments",
"label.lom_review_comments",
"descr.lom_review_comments",
NAMESPACE_XSD + XSD_STRING,
WIDGET_TEXTAREA
);
/*
public static final String PROPERTY_NAME_DC_ = "";
public static final String PROPERTY_LABEL_DC_ = "";
public static final String PROPERTY_DESCRIPTION_DC_ =
"";
public static final String PROPERTY_TYPE_DC_ = XSD_STRING;
public static final String PROPERTY_WIDGET_DC_ = WIDGET_STRING;
public static final ResourcesMetadata PROPERTY_DC_
= new ResourcesMetadata(
PROPERTY_NAME_DC_,
PROPERTY_LABEL_DC_,
PROPERTY_DESCRIPTION_DC_,
PROPERTY_TYPE_DC_,
PROPERTY_WIDGET_DC_
);
*/
public static final String[] DublinCore =
{
PROPERTY_NAME_DC_TITLE,
PROPERTY_NAME_DC_ALTERNATIVE,
PROPERTY_NAME_DC_CREATOR,
PROPERTY_NAME_DC_SUBJECT,
PROPERTY_NAME_DC_DESCRIPTION,
PROPERTY_NAME_DC_TABLEOFCONTENTS,
PROPERTY_NAME_DC_ABSTRACT,
PROPERTY_NAME_DC_PUBLISHER,
PROPERTY_NAME_DC_CONTRIBUTOR,
PROPERTY_NAME_DC_TYPE,
PROPERTY_NAME_DC_FORMAT,
PROPERTY_NAME_DC_CREATED,
PROPERTY_NAME_DC_ISSUED,
PROPERTY_NAME_DC_MODIFIED,
PROPERTY_NAME_DC_IDENTIFIER,
PROPERTY_NAME_DC_SOURCE,
PROPERTY_NAME_DC_LANGUAGE,
PROPERTY_NAME_DC_COVERAGE,
PROPERTY_NAME_DC_RIGHTS,
PROPERTY_NAME_DC_AUDIENCE,
PROPERTY_NAME_DC_EDULEVEL
};
public static final ResourcesMetadata[] DEFINED_PROPERTIES =
{
PROPERTY_DC_TITLE,
PROPERTY_DC_ALTERNATIVE,
PROPERTY_DC_CREATOR,
PROPERTY_DC_SUBJECT,
PROPERTY_DC_DESCRIPTION,
PROPERTY_DC_TABLEOFCONTENTS,
PROPERTY_DC_ABSTRACT,
PROPERTY_DC_PUBLISHER,
PROPERTY_DC_CONTRIBUTOR,
PROPERTY_DC_TYPE,
PROPERTY_DC_FORMAT,
PROPERTY_DC_CREATED,
PROPERTY_DC_ISSUED,
PROPERTY_DC_MODIFIED,
PROPERTY_DC_IDENTIFIER,
PROPERTY_DC_SOURCE,
PROPERTY_DC_LANGUAGE,
PROPERTY_DC_COVERAGE,
PROPERTY_DC_RIGHTS,
PROPERTY_DC_AUDIENCE,
PROPERTY_DC_EDULEVEL,
PROPERTY_DC_ANYURI,
PROPERTY_DC_DOUBLE,
PROPERTY_DC_DATETIME,
PROPERTY_DC_TIME,
PROPERTY_DC_DATE,
PROPERTY_DC_BOOLEAN,
PROPERTY_DC_INTEGER,
PROPERTY_LOM_ROLE,
PROPERTY_LOM_COVERAGE,
PROPERTY_LOM_STATUS,
PROPERTY_LOM_DURATION,
PROPERTY_LOM_ENGAGEMENT_TYPE,
PROPERTY_LOM_LEARNING_RESOURCE_TYPE,
PROPERTY_LOM_INTERACTIVITY_LEVEL,
PROPERTY_LOM_CONTEXT_LEVEL,
PROPERTY_LOM_DIFFICULTY,
PROPERTY_LOM_LEARNING_TIME,
PROPERTY_LOM_ASSUMED_KNOWLEDGE,
PROPERTY_LOM_TECHNICAL_REQUIREMENTS,
PROPERTY_LOM_INSTALL_REMARKS,
PROPERTY_LOM_OTHER_REQUIREMENTS,
PROPERTY_LOM_GRANULARITY_LEVEL,
PROPERTY_LOM_STRUCTURE,
PROPERTY_LOM_RELATION,
PROPERTY_LOM_REVIEWER,
PROPERTY_LOM_REVIEW_DATE,
PROPERTY_LOM_REVIEW_COMMENTS
};
/**
* The character(s) used to delimite parts of the Dotted Name of a StructuredArtifact property.
*/
public static final String DOT = ".";
/**
* A regular expression that will match DOT in an expression.
*/
private static final String DOT_REGEX = "\\.";
/** The default size of the text-input widget for strings */
public static final int DEFAULT_LENGTH = 50;
public static ResourcesMetadata getProperty(String name)
{
ResourcesMetadata rv = null;
if(name != null)
{
boolean found = false;
for(int k = 0; !found && k < DEFINED_PROPERTIES.length; k++)
{
if(DEFINED_PROPERTIES[k].getFullname().equalsIgnoreCase(name) || DEFINED_PROPERTIES[k].getShortname().equalsIgnoreCase(name))
{
rv = DEFINED_PROPERTIES[k];
found = true;
}
}
}
return rv;
}
public static ResourcesMetadata[] getProperties(String[] names)
{
List results = new ArrayList();
for(int i = 0; i < names.length; i++)
{
if(names[i] == null)
{
continue;
}
boolean found = false;
for(int k = 0; !found && k < DEFINED_PROPERTIES.length; k++)
{
if(DEFINED_PROPERTIES[k].getFullname().equalsIgnoreCase(names[i]))
{
results.add(DEFINED_PROPERTIES[k]);
found = true;
}
}
}
ResourcesMetadata[] rv = new ResourcesMetadata[results.size()];
for(int j = 0; j < results.size(); j++)
{
rv[j] = (ResourcesMetadata) results.get(j);
}
return rv;
}
/**
* The string representation of the localname for the metadata property
*/
protected String m_localname;
/**
* The string representation of the namespace for the metadata property
*/
protected String m_namespace;
/**
* The parts of the name of a nested structured object.
*/
protected List m_dottedparts;
/**
* A string that can be used to refer to the metadata property
*/
protected String m_label;
/**
* An explanation of the metadata property, including the nature of the legal values
*/
protected String m_description;
/**
* The datatype of legal values for the metadata property
* (usually a URI ref for an XML Schema Datatype)
*/
protected String m_datatype;
/**
* The default editor widget for the metadata property
*/
protected String m_widget;
protected int m_minCardinality;
protected int m_maxCardinality;
protected int m_currentCount;
protected List m_currentValues;
protected int m_length;
protected List m_enumeration;
protected List m_nested;
protected List m_nestedinstances;
protected List m_instances;
protected ResourcesMetadata m_container;
protected ResourcesMetadata m_parent;
protected Object m_minValue;
protected Object m_maxValue;
protected boolean m_minInclusive;
protected boolean m_maxInclusive;
protected Pattern m_pattern;
protected int m_depth;
/**
* Constructor.
* @param name The string representation of the URI for the metadata property
* @param label A string that can be used to refer to the metadata property
* @param description An explanation of the metadata property, describing the valid values
* @param datatype The datatype of legal values for the metadata property
* (usually a URI ref for an XML Schema Datatype)
* @param widget The default editor widget for the metadata property
*/
public ResourcesMetadata(String namespace, String localname, String label, String description, String datatype, String widget)
{
m_datatype = datatype;
m_description = description;
m_label = label;
m_namespace = namespace;
m_localname = localname;
m_widget = widget;
m_minCardinality = 1;
m_maxCardinality = 1;
m_currentCount = 1;
m_enumeration = null;
m_currentValues = new ArrayList();
m_nested = new ArrayList();
m_pattern = Pattern.compile(".*");
m_minInclusive = true;
m_maxInclusive = true;
m_depth = 0;
m_dottedparts = new ArrayList();
m_nestedinstances = new ArrayList();
m_instances = new ArrayList();
m_parent = null;
m_container = null;
m_length = DEFAULT_LENGTH;
}
/**
* @param prop
*/
public ResourcesMetadata(ResourcesMetadata other)
{
m_datatype = other.m_datatype;
m_description = other.m_description;
m_label = other.m_label;
m_namespace = other.m_namespace;
m_localname = other.m_localname;
m_widget = other.m_widget;
m_minCardinality = other.m_minCardinality;
m_maxCardinality = other.m_maxCardinality;
m_currentCount = other.m_currentCount;
if(other.m_enumeration == null)
{
m_enumeration = null;
}
else
{
m_enumeration = new ArrayList(other.m_enumeration);
}
m_currentValues = new ArrayList();
m_pattern = other.m_pattern;
m_minInclusive = other.m_minInclusive;
m_maxInclusive = other.m_maxInclusive;
m_depth = other.m_depth;
m_dottedparts = new ArrayList(other.m_dottedparts);
m_nestedinstances = new ArrayList();
m_instances = new ArrayList();
m_nested = new ArrayList();
Iterator it = other.m_nested.iterator();
while(it.hasNext())
{
ResourcesMetadata child = (ResourcesMetadata) it.next();
this.m_nested.add(new ResourcesMetadata(child));
}
m_container = other.m_container;
m_length = other.m_length;
}
/**
* @return The datatype of legal values for the metadata property (usually a URI ref for an XML Schema Datatype)
*/
public String getDatatype()
{
return m_datatype;
}
/**
* @return An explanation of the metadata property describing the valid values
*/
public String getDescription()
{
return m_description;
}
/**
* @return
*/
public String getLabel()
{
String name = rb.getString(m_label);
if (name.indexOf("missing_key")!=-1)
return m_label;
else
return name;
}
/**
* @return The string representation of the URI for the metadata property
*/
public String getLocalname()
{
return m_localname;
}
/**
* @return The string representation of the full namespace for the metadata property
*/
public String getNamespace()
{
return m_namespace;
}
/**
* @return The abbreviated version of the namespace (including delimiter)
*/
public String getNamespaceAbbrev()
{
return getNamespaceAbbrev(m_namespace);
}
/**
* @return The string representation of the URI for the metadata property
*/
public String getFullname()
{
return m_namespace + m_localname;
}
/**
* @return The string representation of the URI for the metadata property
*/
public String getShortname()
{
String abbrev = getNamespaceAbbrev(m_namespace);
if(abbrev == null)
{
abbrev = m_namespace;
}
return abbrev + m_localname;
}
/**
* @return The default editor widget for the metadata property
*/
public String getWidget()
{
return m_widget;
}
/**
* @param datatype The datatype of legal values for the metadata property (usually a URI ref for an XML Schema Datatype)
*/
public void setDatatype(String datatype)
{
m_datatype = datatype;
}
/**
* @param description An explanation of the metadata property describing the valid values
*/
public void setDescription(String description)
{
m_description = description;
}
/**
* @param label A string that can be used to refer to the metadata property
*/
public void setLabel(String label)
{
m_label = label;
}
/**
* @param name The string representation of the namespace for the metadata property
*/
public void setNamespace(String namespace)
{
m_namespace = namespace;
}
/**
* @param name The string representation of the URI for the metadata property
*/
public void setLocalname(String localname)
{
m_localname = localname;
}
/**
* @param widget The default editor widget for the metadata property
*/
public void setWidget(String widget)
{
m_widget = widget;
}
public void setContainer(ResourcesMetadata container)
{
this.m_container = container;
}
public ResourcesMetadata getContainer()
{
return this.m_container;
}
protected static Map m_ns2abbrev;
protected static Map m_abbrev2ns;
protected String m_id;
/**
* @param namespace The string representation of the namespace for the metadata property
* @param abbrev The abbreviated version of the namespace (including delimiter)
*/
public static void setNamespaceAbbrev(String namespace, String abbrev)
{
if(m_ns2abbrev == null || m_abbrev2ns == null)
{
initNamespaceMaps();
}
// what if namespace already defined mapping to a different abbrev?
// new abbrev will be used instead but old abbrev will still map to namespace
m_abbrev2ns.put(abbrev, namespace);
m_ns2abbrev.put(namespace,abbrev);
}
/**
* @param namespace The string representation of the namespace for a metadata property
* @return The abbreviated version of the namespace identifier (including delimiter)
*/
public static String getNamespaceAbbrev(String namespace)
{
String abbrev = null;
if(m_ns2abbrev == null)
{
initNamespaceMaps();
}
abbrev = (String) m_ns2abbrev.get(namespace);
if(abbrev == null)
{
abbrev = assignAbbrev(namespace);
}
return abbrev;
}
/**
* @param abbrev The abbreviated version of the namespace identifier (including delimiter)
* @return The string representation of the full name of the namespace
*/
public static String getNamespace(String abbrev)
{
String namespace = null;
if(m_abbrev2ns == null)
{
initNamespaceMaps();
}
namespace = (String) m_abbrev2ns.get(abbrev);
return namespace;
}
/**
* Make sure that maps are defined and default values for Dublin Core
* and XMLSchema Datatypes are included
*/
protected static void initNamespaceMaps()
{
if(m_ns2abbrev == null)
{
m_ns2abbrev = new HashMap();
}
if(m_abbrev2ns == null)
{
m_abbrev2ns = new HashMap();
}
setNamespaceAbbrev(NAMESPACE_DC, NAMESPACE_DC_ABBREV);
setNamespaceAbbrev(NAMESPACE_DCTERMS, NAMESPACE_DCTERMS_ABBREV);
setNamespaceAbbrev(NAMESPACE_XSD, NAMESPACE_XSD_ABBREV);
setNamespaceAbbrev(NAMESPACE_LOM, NAMESPACE_LOM_ABBREV);
}
protected static String assignAbbrev(String namespace)
{
String abbrev = "error";
// removed the sync block from here
abbrev = "s" + namespaceNumber;
namespaceNumber = new AtomicInteger(namespaceNumber.byteValue() + 1);
setNamespaceAbbrev(namespace, abbrev);
return abbrev;
}
/**
* @return Returns the currentCount.
*/
public int getCurrentCount()
{
return this.m_currentCount;
}
/**
* @return Returns the currentCount.
*/
public Integer getCount()
{
return Integer.valueOf(this.getCurrentCount());
}
public void setValue(String name, Object value)
{
if(name.startsWith(this.getDottedname()))
{
String localname = name.substring(name.length());
if(localname == null || "".equals(localname))
{
if(this.m_currentValues == null)
{
this.m_currentValues = new ArrayList();
}
if(this.m_currentValues.size() > 0)
{
this.m_currentValues.set(0, value);
}
else
{
this.m_currentValues.add(0, value);
}
}
else
{
String[] parts = localname.split(DOT_REGEX);
String target = parts[0];
boolean found = false;
Iterator it = getNested().iterator();
ResourcesMetadata prop = null;
while(!found && it.hasNext())
{
prop = (ResourcesMetadata) it.next();
if(prop.getLocalname().equals(target))
{
found = true;
}
}
if(found)
{
prop.setValue(name, value);
}
}
}
}
/**
* @return
*/
public List getValues()
{
return m_currentValues;
}
/**
* @param index
* @return
*/
public Object getValue(int index)
{
Object rv = null;
if(m_currentValues != null && ! m_currentValues.isEmpty())
{
try
{
rv = m_currentValues.get(index);
}
catch(ArrayIndexOutOfBoundsException e)
{
// return null
}
}
return rv;
}
/**
* @return
*/
public Object getValue()
{
return getValue(0);
}
public List getInstanceValues()
{
List values = new ArrayList();
values.addAll(this.m_currentValues);
if(this.m_instances == null)
{
this.m_instances = new ArrayList();
}
Iterator it = this.m_instances.iterator();
while(it.hasNext())
{
ResourcesMetadata instance = (ResourcesMetadata) it.next();
values.addAll(instance.getValues());
}
return values;
}
/**
* @param index
* @param value
*/
public void setValue(int index, Object value)
{
if(m_currentValues == null)
{
m_currentValues = new ArrayList();
}
try
{
m_currentValues.set(index, value);
}
catch(IndexOutOfBoundsException e)
{
m_currentValues.add(value);
}
catch(Exception e)
{
logger.warn("ResourcesMetadata[" + this.m_id + "].setValue(" + index + "," + value + ") " + e);
}
}
/**
* @param currentCount The currentCount to set.
*/
public void setCurrentCount(int currentCount)
{
m_currentCount = currentCount;
if(m_parent != null)
{
m_parent.setCurrentCount(currentCount);
}
if(this.m_instances != null)
{
Iterator it = this.m_instances.iterator();
while(it.hasNext())
{
ResourcesMetadata instance = (ResourcesMetadata) it.next();
instance.m_currentCount = currentCount;
}
}
}
/**
* @return Returns the maxCardinality.
*/
public int getMaxCardinality()
{
return m_maxCardinality;
}
/**
* @param maxCardinality The maxCardinality to set.
*/
public void setMaxCardinality(int maxCardinality)
{
m_maxCardinality = maxCardinality;
}
/**
* @return Returns the minCardinality.
*/
public int getMinCardinality()
{
return m_minCardinality;
}
/**
* @param minCardinality The minCardinality to set.
*/
public void setMinCardinality(int minCardinality)
{
m_minCardinality = minCardinality;
}
/**
* increments the currentCount if it is less than maxCardinality.
*/
public void incrementCount()
{
if(this.getCurrentCount() < m_maxCardinality)
{
this.setCurrentCount(this.m_currentCount + 1);
}
} // incrementCount
/**
* @return true if additional instances of the field can be added, false otherwise.
*/
public boolean canAddInstances()
{
return this.getCurrentCount() < m_maxCardinality;
}
/**
* Access the desired size of a text input field.
* @return Returns the length, which represents the size of a text input field.
*/
public int getLength()
{
return m_length;
}
/**
* Set the the size of a text input field.
* @param length The length to set.
*/
public void setLength(int length)
{
m_length = length;
}
/**
* @return Returns the enumeration.
*/
public List getEnumeration()
{
List rv;
if(m_enumeration == null)
{
rv = new ArrayList();
}
else
{
rv = new ArrayList(m_enumeration);
}
return rv;
}
/**
* @param enumeration The enumeration to set.
*/
public void setEnumeration(List enumeration)
{
m_enumeration = new ArrayList(enumeration);
}
public boolean isNested()
{
return (m_nested != null) && ! m_nested.isEmpty();
}
/**
* @return Returns the nested.
*/
public List getNested()
{
if(m_nested == null)
{
m_nested = new ArrayList();
}
return m_nested;
}
/**
* @return Returns the nested.
*/
public List getNestedInstances()
{
List instances = new ArrayList();
if(m_nested == null)
{
m_nested = new ArrayList();
}
Iterator it = this.m_nested.iterator();
while(it.hasNext())
{
ResourcesMetadata nested = (ResourcesMetadata) it.next();
instances.addAll(nested.m_instances);
}
return instances;
}
/**
* @param nested The nested to set.
*/
public void setNested(List nested)
{
m_nested = nested;
}
/**
* @return Returns the maxValue.
*/
public Object getMaxValue()
{
return m_maxValue;
}
/**
* @param maxValue The maxValue to set.
*/
public void setMaxValue(Object maxValue)
{
m_maxValue = maxValue;
}
/**
* @return Returns the minValue.
*/
public Object getMinValue()
{
return m_minValue;
}
/**
* @param minValue The minValue to set.
*/
public void setMinValue(Object minValue)
{
m_minValue = minValue;
}
/**
* @return Returns the pattern.
*/
public Pattern getPattern()
{
return m_pattern;
}
/**
* @param pattern The pattern to set.
*/
public void setPattern(Pattern pattern)
{
m_pattern = pattern;
}
/**
* @return Returns the maxInclusive.
*/
public boolean isMaxInclusive()
{
return m_maxInclusive;
}
/**
* @param maxInclusive The maxInclusive to set.
*/
public void setMaxInclusive(boolean maxInclusive)
{
m_maxInclusive = maxInclusive;
}
/**
* @return Returns the minInclusive.
*/
public boolean isMinInclusive()
{
return m_minInclusive;
}
/**
* @param minInclusive The minInclusive to set.
*/
public void setMinInclusive(boolean minInclusive)
{
m_minInclusive = minInclusive;
}
/**
* @return Returns the depth.
*/
public int getDepth()
{
return m_depth;
}
/**
* @param depth The depth to set.
*/
public void setDepth(int depth)
{
m_depth = depth;
}
/**
* @param string
*/
public void setId(String id)
{
m_id = id;
}
public String getId()
{
return m_id;
}
public void setDottedparts(List parts)
{
m_dottedparts = parts;
}
public List getDottedparts()
{
return m_dottedparts;
}
public void setDottedpart(int index, String part)
{
if(m_dottedparts == null)
{
m_dottedparts = new ArrayList();
}
if(index >= 0 && m_dottedparts.size() < index)
{
m_dottedparts.set(index, part);
}
else
{
m_dottedparts.add(part);
}
}
public void insertDottedpart(int index, String part)
{
if(m_dottedparts == null)
{
m_dottedparts = new ArrayList();
}
if(index >= 0 && index < m_dottedparts.size())
{
m_dottedparts.add(index, part);
}
else
{
m_dottedparts.add(part);
}
}
public String getDottedname()
{
StringBuilder name = new StringBuilder();
Iterator it = m_dottedparts.iterator();
while (it.hasNext()) {
String part = (String) it.next();
name.append(part);
if (it.hasNext()) {
name.append(DOT);
}
}
return name.toString();
}
public String getParentname()
{
String name = "";
if (m_parent != null) {
name = m_parent.getDottedname();
} else {
boolean first = true;
StringBuilder sb = new StringBuilder();
Iterator it = m_dottedparts.iterator();
while (it.hasNext()) {
String part = (String) it.next();
if (it.hasNext()) {
if (!first) {
sb.append(DOT);
}
sb.append(part);
first = false;
}
}
name = sb.toString();
}
return name;
}
public void setDottedparts(String path)
{
String[] names = path.split(DOT_REGEX);
m_dottedparts = new ArrayList();
for(int i = 0; i < names.length; i++)
{
m_dottedparts.add(names[i]);
}
}
/**
* Recursively traverses a hierarchy of ResourcesMetadata objects rooted at this
* node in the hierarchy and returns a flat list of ResourcesMetadata objects.
* The hierarchy is expressed as references in the list of nested objects. The return
* value is a list of objects ordered for rendering as an HTML form, with at least
* one entry for each HTML tag required to render the form.
*
* @return An ordered list of ResourcesMetadata objects.
*/
public List getFlatList()
{
List rv = new ArrayList();
rv.add(this);
Iterator it = this.getNested().iterator();
while(it.hasNext())
{
ResourcesMetadata prop = (ResourcesMetadata) it.next();
if(prop.getMaxCardinality() > 1)
{
for(int i = 0; i < prop.getCurrentCount(); i++)
{
ResourcesMetadata copy = null;
if(i < prop.m_instances.size())
{
copy = (ResourcesMetadata) prop.m_instances.get(i);
}
else
{
copy = new ResourcesMetadata(prop);
List parts = new ArrayList(this.getDottedparts());
parts.add(copy.getLocalname());
parts.add(Integer.toString(i));
copy.setDottedparts(parts);
copy.setContainer(this);
if(prop.m_parent == null)
{
// in that case, prop is the parent
prop.m_instances.add(copy);
copy.m_parent = prop;
}
else
{
// and otherwise, prop's parent is parent
prop.m_parent.m_instances.add(copy);
//copy.m_parent = prop.m_parent;
}
//copy.m_parent.m_currentCount++;
}
if(copy.getNested().isEmpty())
{
rv.add(copy);
}
else
{
rv.addAll(copy.getFlatList());
}
}
}
else
{
ResourcesMetadata copy = null;
if(prop.m_instances.size() > 0)
{
copy = (ResourcesMetadata) prop.m_instances.get(0);
}
else
{
copy = new ResourcesMetadata(prop);
List parts = new ArrayList(this.getDottedparts());
parts.add(copy.getLocalname());
copy.setDottedparts(parts);
copy.setContainer(this);
if(prop.m_parent == null)
{
// prop is parent
prop.m_instances.add(copy);
copy.m_parent = prop;
}
else
{
// prop's parent is parent
prop.m_parent.m_instances.add(copy);
//copy.m_parent = prop.m_parent;
}
// copy.m_parent.m_currentCount++;
}
if(copy.getNested().isEmpty())
{
rv.add(copy);
}
else
{
rv.addAll(copy.getFlatList());
}
}
}
return rv;
} // getFlatList
/**
* Add an instance of "this" property. The dotted-name of the new instance will be the
* same as the dotted-name of "this" property, except that it will have a decimal number
* appended if the property's maximum cardinality allows multiple instances of the property.
*/
public ResourcesMetadata addInstance()
{
if(this.m_currentCount > this.m_maxCardinality)
{
return null;
}
ResourcesMetadata copy = new ResourcesMetadata(this);
copy.setContainer(this.m_container);
List parts = new ArrayList(this.getDottedparts());
if(this.getMaxCardinality() > 1 && this.m_parent == null)
{
parts.add(Integer.toString(this.m_instances.size()));
}
else if(this.getMaxCardinality() > 1)
{
parts.add(Integer.toString(this.m_parent.m_instances.size()));
}
copy.setDottedparts(parts);
if(this.m_parent == null)
{
this.m_instances.add(copy);
copy.m_parent = this;
this.setCurrentCount(this.m_instances.size());
}
else
{
this.m_parent.m_instances.add(copy);
//copy.m_parent = this.m_parent;
this.setCurrentCount(this.m_parent.m_instances.size());
}
return copy;
} // addNestedInstance
} // ResourcesMetadata