001    package net.sf.logdistiller;
002    
003    /*
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    import java.io.Serializable;
018    import java.util.ArrayList;
019    import java.util.List;
020    import java.util.regex.Pattern;
021    
022    /**
023     * @since 1.1
024     */
025    public class Attributes
026        implements Serializable
027    {
028        private static final long serialVersionUID = -3748978489200255819L;
029    
030        public static final Extension[] NO_EXTENSIONS = new Extension[0];
031    
032        private final String attributes;
033    
034        private final Extension[] extensions;
035    
036        public Attributes( String attributes, Extension[] extensions )
037        {
038            this.attributes = attributes;
039            this.extensions = extensions;
040        }
041    
042        public int getExtensionsCount()
043        {
044            return extensions.length;
045        }
046    
047        public Extension[] getExtensions()
048        {
049            return extensions;
050        }
051    
052        public String getAttributes()
053        {
054            return attributes;
055        }
056    
057        public static class Extension
058            implements Serializable
059        {
060            private static final long serialVersionUID = 4511835440598290789L;
061    
062            private final String source;
063    
064            private final List/*<String>*/ provides;
065    
066            private transient final Pattern regexp;
067    
068            public Extension( String source, String provides, String regexp )
069            {
070                this.source = source;
071                String[] attributes = provides.split( "," );
072                this.provides = new ArrayList( attributes.length );
073                for ( int i = 0; i < attributes.length; i++ )
074                {
075                    String attribute = attributes[i].trim();
076                    this.provides.add( attribute );
077                }
078                this.regexp = Pattern.compile( regexp );
079            }
080    
081            public String getSource()
082            {
083                return source;
084            }
085    
086            public List getProvides()
087            {
088                return provides;
089            }
090    
091            public Pattern getRegexp()
092            {
093                return regexp;
094            }
095        }
096    }