/* * Copyright 2004-2009 the original author or authors. * * Licensed under the Apache 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.apache.org/licenses/LICENSE-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 org.compass.core.config; import org.compass.core.converter.ConversionException; import org.compass.core.metadata.Alias; import org.compass.core.metadata.CompassMetaData; import org.compass.core.metadata.MetaData; import org.compass.core.metadata.MetaDataGroup; /** * @author kimchy */ public class CommonMetaDataLookup { private CompassMetaData metaData; public CommonMetaDataLookup(CompassMetaData metaData) { this.metaData = metaData; } public Alias lookupAlias(String value) throws ConfigurationException { if (value == null) { return null; } if (!value.startsWith("${") || !value.endsWith("}")) { return null; } String val = value.substring(2, value.length() - 1); int dotIndex = val.indexOf("."); if (dotIndex == -1) { throw new ConfigurationException("Mailformed alias lookup value, must have a '.'"); } String groupId = val.substring(0, dotIndex); MetaDataGroup group = metaData.getGroup(groupId); if (group == null) { throw new ConfigurationException("Couldn't find group [" + groupId + "] in lookup value [" + val + "]"); } String aliasId = val.substring(dotIndex + 1, val.length()); dotIndex = aliasId.indexOf("."); if (dotIndex != -1) { aliasId = aliasId.substring(0, dotIndex); } Alias alias = group.getAlias(aliasId); if (alias == null) { throw new ConfigurationException("Couldn't find alias for [" + val + "]"); } return alias; } public String lookupAliasName(String value) throws ConfigurationException { Alias alias = lookupAlias(value); if (alias == null) { return value; } return alias.getName(); } public MetaData lookupMetaData(String value) throws ConfigurationException { if (value == null) { return null; } if (!value.startsWith("${") || !value.endsWith("}")) { return null; } String val = value.substring(2, value.length() - 1); int dotIndex = val.indexOf("."); if (dotIndex == -1) { throw new ConfigurationException( "Mailformed meta-data lookup value, must have a '.' with a meta-data-group as the prefix"); } String groupId = val.substring(0, dotIndex); MetaDataGroup group = metaData.getGroup(groupId); if (group == null) { throw new ConfigurationException("Couldn't find group [" + groupId + "] in lookup value [" + val + "]"); } String metaDataId = val.substring(dotIndex + 1, val.length()); dotIndex = metaDataId.indexOf("."); if (dotIndex != -1) { metaDataId = metaDataId.substring(0, dotIndex); } MetaData metaData = group.getMetaData(metaDataId); if (metaData == null) { throw new ConfigurationException("Couldn't find meta-data for [" + val + "]"); } return metaData; } public String lookupMetaDataName(String value) throws ConfigurationException { MetaData metaData = lookupMetaData(value); if (metaData == null) { return value; } return metaData.getName(); } public String lookupMetaDataFormat(String value) throws ConfigurationException { MetaData metaData = lookupMetaData(value); if (metaData == null) { // this part return null here, and not the original value return null; } return metaData.getFormat(); } public String lookupMetaDataValue(String value) throws ConfigurationException { MetaData metaData = lookupMetaData(value); if (metaData == null) { return value; } int dotIndex = value.lastIndexOf("."); if (dotIndex == -1) { throw new ConversionException( "Must defined a [.] after the meta data for the id of the value with lookup [" + value + "]"); } String valueId = value.substring(dotIndex + 1, value.length() - 1); return metaData.getValue(valueId); } }