/** * Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php */ package org.ralasafe.metadata.user; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.ralasafe.db.DBPower; import org.ralasafe.util.StringUtil; public class UserMetadata { private TableMetadata mainTableMetadata; private TableMetadata[] singleValueTableMetadatas; private TableMetadata[] multiValueTableMetadatas; private String[] userFields; private String[] userFieldDisplayNames; private String[] showUserFields; private String[] showUserFieldDisplayNames; public static final String ID_FIELD_NAME = "id"; public static final String NAME_FIELD_NAME = "name"; public TableMetadata getMainTableMetadata() { return mainTableMetadata; } public void setMainTableMetadata(TableMetadata mainTableMetadata) { this.mainTableMetadata = mainTableMetadata; } public TableMetadata[] getSingleValueTableMetadatas() { return singleValueTableMetadatas; } public void setSingleValueTableMetadatas( TableMetadata[] singleValueTableMetadatas) { this.singleValueTableMetadatas = singleValueTableMetadatas; } public TableMetadata[] getMultiValueTableMetadatas() { return multiValueTableMetadatas; } public void setMultiValueTableMetadatas( TableMetadata[] multiValueTableMetadatas) { this.multiValueTableMetadatas = multiValueTableMetadatas; } public String[] getUserFields() { return userFields; } public void setUserFields(String[] userFields) { this.userFields = userFields; } public String[] getUserFieldDisplayNames() { return userFieldDisplayNames; } public void setUserFieldDisplayNames(String[] userFieldDisplayNames) { this.userFieldDisplayNames = userFieldDisplayNames; } public String[] getShowUserFields() { return showUserFields; } public void setShowUserFields(String[] showUserFields) { this.showUserFields = showUserFields; } public String[] getShowUserFieldDisplayNames() { return showUserFieldDisplayNames; } public void setShowUserFieldDisplayNames(String[] showUserFieldDisplayNames) { this.showUserFieldDisplayNames = showUserFieldDisplayNames; } /** * Validate UserMetadata. * * @return validate info */ public String getValidInfo() { String line = System.getProperty("line.separator"); StringBuffer buff = new StringBuffer(); if (mainTableMetadata == null) { buff .append( "The attribute name=\"mainTable\" is required in 'table' element.") .append(line); } else { String ds = mainTableMetadata.getDatasourceName(); if (StringUtil.isEmpty(ds)) { buff.append( "The attribute 'ds' is required in 'table' element.") .append(line); } else { Collection dsNames = DBPower.getDsNames(); if (!dsNames.contains(ds)) { buff.append("No definition found for datasource ds=\"") .append(ds).append("\".").append(line); } } FieldMetadata[] fields = mainTableMetadata.getFields(); Set fieldNames = new HashSet(); for (int i = 0; i < fields.length; i++) { FieldMetadata field = fields[i]; fieldNames.add(field.getName()); } if (mainTableMetadata.getUniqueFields() == null || mainTableMetadata.getUniqueFields().length == 0) { buff .append( "The attribute 'uniqueFields' is required in 'table' element.") .append(line); } else { FieldMetadata[] uniqueFields = mainTableMetadata .getUniqueFields(); for (int i = 0; i < uniqueFields.length; i++) { FieldMetadata fieldMetadata = uniqueFields[i]; if (fieldMetadata == null) { buff .append( "No attribute 'uniqueFields' found in 'table' element or no field definition for 'uniqueFields'.") .append(line); } else { String name = fieldMetadata.getName(); if (!fieldNames.contains(name)) { buff .append( "The field '" + name + "' specified in 'uniqueFields' cound not found.") .append(line); } } } } if (mainTableMetadata.getSqlTableName() == null) { buff .append( "The attribute 'sqlName' is required in 'table' element.") .append(line); } if (!fieldNames.contains(ID_FIELD_NAME)) { buff .append( "A 'field' element with attribute name=\"id\" is required.") .append(line); } if (!fieldNames.contains(NAME_FIELD_NAME)) { buff .append( "A 'field' element with attribute name=\"name\" is required.") .append(line); } } String info = buff.toString(); return info.length() == 0 ? null : info; } }