001 /*
002 * JBoss, Home of Professional Open Source.
003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors
004 * as indicated by the @author tags. See the copyright.txt file in the
005 * distribution for a full listing of individual contributors.
006 *
007 * This is free software; you can redistribute it and/or modify it
008 * under the terms of the GNU Lesser General Public License as
009 * published by the Free Software Foundation; either version 2.1 of
010 * the License, or (at your option) any later version.
011 *
012 * This software is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015 * Lesser General Public License for more details.
016 *
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this software; if not, write to the Free
019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021 */
022 package org.jboss.dna.repository.sequencers;
023
024 import java.util.Collection;
025 import java.util.Collections;
026 import java.util.LinkedHashSet;
027 import java.util.Set;
028 import net.jcip.annotations.Immutable;
029 import org.jboss.dna.common.component.ComponentConfig;
030
031 /**
032 * @author Randall Hauch
033 */
034 @Immutable
035 public class SequencerConfig extends ComponentConfig {
036
037 private final Set<SequencerPathExpression> pathExpressions;
038
039 public SequencerConfig( String name, String description, String classname, String[] classpath, String... pathExpressions ) {
040 this(name, description, System.currentTimeMillis(), classname, classpath, pathExpressions);
041 }
042
043 public SequencerConfig( String name, String description, long timestamp, String classname, String[] classpath, String... pathExpressions ) {
044 super(name, description, timestamp, classname, classpath);
045 this.pathExpressions = buildPathExpressionSet(pathExpressions);
046 }
047
048 /* package */static Set<SequencerPathExpression> buildPathExpressionSet( String... pathExpressions ) {
049 Set<SequencerPathExpression> result = null;
050 if (pathExpressions != null) {
051 result = new LinkedHashSet<SequencerPathExpression>();
052 for (String pathExpression : pathExpressions) {
053 if (pathExpression == null) continue;
054 pathExpression = pathExpression.trim();
055 if (pathExpression.length() == 0) continue;
056 result.add(SequencerPathExpression.compile(pathExpression));
057 }
058 result = Collections.unmodifiableSet(result);
059 } else {
060 result = Collections.emptySet(); // already immutable
061 }
062 return result;
063 }
064
065 public Collection<SequencerPathExpression> getPathExpressions() {
066 return Collections.unmodifiableSet(this.pathExpressions);
067 }
068
069 public boolean hasChanged( SequencerConfig that ) {
070 if (super.hasChanged(that)) return true;
071 if (!this.getPathExpressions().equals(that.getPathExpressions())) return true;
072 return false;
073 }
074
075 }