ConditionsPool.java :  » IDE-Netbeans » nbi » org » netbeans » installer » sandbox » utils » installation » impl » Java Open Source

Java Open Source » IDE Netbeans » nbi 
nbi » org » netbeans » installer » sandbox » utils » installation » impl » ConditionsPool.java
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 * 
 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
 * 
 * The contents of this file are subject to the terms of either the GNU General
 * Public License Version 2 only ("GPL") or the Common Development and Distribution
 * License("CDDL") (collectively, the "License"). You may not use this file except in
 * compliance with the License. You can obtain a copy of the License at
 * http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
 * License for the specific language governing permissions and limitations under the
 * License.  When distributing the software, include this License Header Notice in
 * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP.  Sun
 * designates this particular file as subject to the "Classpath" exception as
 * provided by Sun in the GPL Version 2 section of the License file that
 * accompanied this code. If applicable, add the following below the License Header,
 * with the fields enclosed by brackets [] replaced by your own identifying
 * information: "Portions Copyrighted [year] [name of copyright owner]"
 * 
 * Contributor(s):
 * 
 * The Original Software is NetBeans. The Initial Developer of the Original Software
 * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
 * Rights Reserved.
 * 
 * If you wish your version of this file to be governed by only the CDDL or only the
 * GPL Version 2, indicate your decision by adding "[Contributor] elects to include
 * this software in this distribution under the [CDDL or GPL Version 2] license." If
 * you do not indicate a single choice of license, a recipient has the option to
 * distribute your version of this file under either the CDDL, the GPL Version 2 or
 * to extend the choice of license to its licensees as provided above. However, if
 * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then
 * the option applies only if the new code is made subject to such option by the
 * copyright holder.
 */

package org.netbeans.installer.sandbox.utils.installation.impl;

import java.util.HashMap;
import org.netbeans.installer.sandbox.utils.installation.conditions.AndCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.CRC32Condition;
import org.netbeans.installer.sandbox.utils.installation.conditions.DefaultFileCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.EmptyDirectoryCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.FalseCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.FileCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.LogicalCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.MD5Condition;
import org.netbeans.installer.sandbox.utils.installation.conditions.NotCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.OrCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.SHA1Condition;
import org.netbeans.installer.sandbox.utils.installation.conditions.SizeCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.TimeCondition;
import org.netbeans.installer.sandbox.utils.installation.conditions.TrueCondition;
import org.netbeans.installer.utils.installation.conditions.*;

/**
 *
 * @author Dmitry Lipin
 */
class ConditionsPool {
    private HashMap     <String, FileCondition> conditionMap =
            new HashMap <String, FileCondition> ();
    
    public ConditionsPool() {
        initConditions();
    }
    protected HashMap getConditionMap() {
        return conditionMap;
    }
    protected FileCondition getCondition(String str) {
        String s = str;
        FileCondition result=null;
        if(s!=null) {
            int start = s.indexOf("(");
            int end = s.lastIndexOf(")");
            if(start!=-1 && end!=-1) {
                // there are some logical conditions: and, or, not
                result = getConditionByName(s.substring(0,start));
                String [] params =  s.substring(start+1,end).split(",");
                FileCondition [] fcs = new FileCondition [params.length] ;
                for(int i=0;i<params.length;i++) {
                    fcs[i] = getCondition(params[i]);
                }
                if(result instanceof LogicalCondition) {
                    result = ((LogicalCondition)result).clone();
                    ((LogicalCondition)result).setConditions(fcs);
                }
            } else {
                result = getConditionByName(s);
            }
        }
        return result;
    }
    private void initConditions() {
        addCondition(new AndCondition());
        addCondition(new CRC32Condition());
        addCondition(new DefaultFileCondition());
        addCondition(new FalseCondition());
        addCondition(new MD5Condition());
        addCondition(new NotCondition());
        addCondition(new EmptyDirectoryCondition());
        addCondition(new OrCondition());
        addCondition(new SHA1Condition());
        addCondition(new SizeCondition());
        addCondition(new TimeCondition());
        addCondition(new TrueCondition());
    }
    private FileCondition getConditionByName(String name) {
        // it is not a good idea to do that.
        // Maybe it should be replaced by DefaultFileCondition or smth else
        return (conditionMap.containsKey(name)) ?
            conditionMap.get(name) : new DefaultFileCondition();
        
        
    }
    public void addCondition(FileCondition fcc) {
        if(fcc instanceof LogicalCondition) {
            // if adding condition is complex then first add all child conditionsF
            FileCondition[] fcs = ((LogicalCondition)fcc).getConditions();
            for(FileCondition fc:fcs) {
                addCondition(fc);
            }
        }
        if(!conditionMap.containsKey(fcc.getName())) {
            conditionMap.put(fcc.getName(),fcc);
        }
    }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.