001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018:
019: /* $Id: ItemConfiguration.java 473861 2006-11-12 03:51:14Z gregor $ */
020:
021: package org.apache.lenya.ac.impl;
022:
023: import org.apache.avalon.framework.configuration.Configuration;
024: import org.apache.avalon.framework.configuration.ConfigurationException;
025: import org.apache.avalon.framework.configuration.DefaultConfiguration;
026: import org.apache.lenya.ac.AccessControlException;
027:
028: /**
029: * Use this class to create configurations from {@link AbstractItem}s or
030: * to build {@link AbstractItem}s from configurations.
031: */
032: public class ItemConfiguration {
033:
034: /**
035: * Ctor.
036: */
037: public ItemConfiguration() {
038: // do nothing
039: }
040:
041: /**
042: * Saves the ID, name and description of the Manageable to the configuration.
043: * @param manageable A manageable.
044: * @param configuration A configuration.
045: */
046: public void save(AbstractItem manageable,
047: DefaultConfiguration configuration) {
048: configuration.setAttribute(ATTRIBUTE_CLASS, manageable
049: .getClass().getName());
050: configuration.setAttribute(ATTRIBUTE_ID, manageable.getId());
051:
052: DefaultConfiguration child = null;
053:
054: // add name node
055: child = new DefaultConfiguration(ELEMENT_NAME);
056: child.setValue(manageable.getName());
057: configuration.addChild(child);
058:
059: // add description node
060: child = new DefaultConfiguration(ELEMENT_DESCRIPTION);
061: child.setValue(manageable.getDescription());
062: configuration.addChild(child);
063:
064: }
065:
066: protected static final String ELEMENT_NAME = "name";
067: protected static final String ELEMENT_DESCRIPTION = "description";
068: protected static final String ATTRIBUTE_ID = "id";
069: protected static final String ATTRIBUTE_CLASS = "class";
070:
071: /**
072: * Configures a Manageable.
073: * @param manageable The manageable.
074: * @param configuration The configuration.
075: * @throws ConfigurationException when something went wrong.
076: */
077: public void configure(AbstractItem manageable,
078: Configuration configuration) throws ConfigurationException {
079: manageable.setId(configuration.getAttribute(ATTRIBUTE_ID));
080: manageable.setName(configuration.getChild(ELEMENT_NAME)
081: .getValue(""));
082: manageable.setDescription(configuration.getChild(
083: ELEMENT_DESCRIPTION).getValue(""));
084: }
085:
086: /**
087: * Returns the class name of an item.
088: * @param config The item configuration.
089: * @return The class name.
090: * @throws AccessControlException when something went wrong.
091: */
092: public static String getItemClass(Configuration config)
093: throws AccessControlException {
094: String klass = null;
095:
096: try {
097: klass = config
098: .getAttribute(ItemConfiguration.ATTRIBUTE_CLASS);
099: } catch (ConfigurationException e) {
100: String errorMsg = "Exception when extracting class name from identity file: "
101: + klass + config.getAttributeNames();
102: throw new AccessControlException(errorMsg, e);
103: }
104: return klass;
105: }
106:
107: }
|