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: FileGroup.java 485769 2006-12-11 17:41:23Z andreas $ */
020:
021: package org.apache.lenya.ac.file;
022:
023: import java.io.File;
024:
025: import org.apache.avalon.framework.configuration.Configuration;
026: import org.apache.avalon.framework.configuration.ConfigurationException;
027: import org.apache.avalon.framework.configuration.DefaultConfiguration;
028: import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
029: import org.apache.avalon.framework.logger.Logger;
030: import org.apache.lenya.ac.AccessControlException;
031: import org.apache.lenya.ac.Item;
032: import org.apache.lenya.ac.ItemManager;
033: import org.apache.lenya.ac.impl.AbstractGroup;
034: import org.apache.lenya.ac.impl.ItemConfiguration;
035:
036: /**
037: * File-based group implementation.
038: */
039: public class FileGroup extends AbstractGroup implements Item {
040:
041: /**
042: * @see org.apache.lenya.ac.Group#delete()
043: */
044: public void delete() throws AccessControlException {
045: super .delete();
046: getFile().delete();
047: }
048:
049: /**
050: * Creates a new FileGroup object.
051: * @param itemManager The item manager.
052: * @param logger The logger.
053: */
054: public FileGroup(ItemManager itemManager, Logger logger) {
055: super (itemManager, logger);
056: }
057:
058: /**
059: * Create a new instance of <code>FileGroup</code>
060: * @param itemManager The item manager.
061: * @param logger The logger.
062: * @param id the ID of the group
063: */
064: public FileGroup(ItemManager itemManager, Logger logger, String id) {
065: super (itemManager, logger, id);
066: FileItemManager fileItemManager = (FileItemManager) itemManager;
067: setConfigurationDirectory(fileItemManager
068: .getConfigurationDirectory());
069: }
070:
071: /**
072: * Configures this file group.
073: * @param config The configuration.
074: * @throws ConfigurationException when something went wrong.
075: */
076: public void configure(Configuration config)
077: throws ConfigurationException {
078: new ItemConfiguration().configure(this , config);
079: }
080:
081: /**
082: * Returns the configuration file.
083: * @return A file object.
084: */
085: protected File getFile() {
086: File xmlPath = getConfigurationDirectory();
087: File xmlFile = new File(xmlPath, getId()
088: + FileGroupManager.SUFFIX);
089: return xmlFile;
090: }
091:
092: /**
093: * Save this group
094: * @throws AccessControlException if the save failed
095: */
096: public void save() throws AccessControlException {
097: DefaultConfigurationSerializer serializer = new DefaultConfigurationSerializer();
098: Configuration config = createConfiguration();
099: File xmlfile = getFile();
100:
101: try {
102: serializer.serializeToFile(xmlfile, config);
103: } catch (Exception e) {
104: throw new AccessControlException(e);
105: }
106: }
107:
108: /**
109: * Group configuration element.
110: */
111: public static final String GROUP = "group";
112:
113: /**
114: * Create a configuration containing the group details
115: * @return a <code>Configuration</code>
116: */
117: private Configuration createConfiguration() {
118: DefaultConfiguration config = new DefaultConfiguration(GROUP);
119: new ItemConfiguration().save(this , config);
120:
121: return config;
122: }
123:
124: private File configurationDirectory;
125:
126: /**
127: * Returns the configuration directory.
128: * @return A file object.
129: */
130: protected File getConfigurationDirectory() {
131: return this .configurationDirectory;
132: }
133:
134: protected void setConfigurationDirectory(
135: File _configurationDirectory) {
136: assert (_configurationDirectory != null)
137: && _configurationDirectory.isDirectory();
138: this.configurationDirectory = _configurationDirectory;
139: }
140: }
|