Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
   * Other names may be trademarks of their respective owners.
   *
   * 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.  Oracle designates this
  * particular file as subject to the "Classpath" exception as provided
  * by Oracle 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]"
  * 
  * 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.
  * 
  * Contributor(s):
  * 
  * Portions Copyrighted 2008 Sun Microsystems, Inc.
  */
 
 package org.netbeans.modules.ide.ergonomics.fod;
 
 import java.net.URL;
 import java.util.Map;
 import java.util.Set;
Description of Feature On Demand capabilities and a factory to create new instances.

Author(s):
Jaroslav Tulach <jtulach@netbeans.org>, Jirka Rechtacek <jrechtacek@netbeans.org>
 
 public final class FeatureInfo {
     private final URL delegateLayer;
     private FileSystem fs;
     private final Set<Stringcnbs;
     private final Map<String,Stringnbproject = new HashMap<String,String>();
     private final Map<Object[],Stringfiles = new HashMap<Object[],String>();
     private Properties properties;
     final String clusterName;
     private Boolean cacheEnabled;
     private Boolean cachePresent;
 
     private FeatureInfo(String clusterNameSet<StringcnbsURL delegateLayerProperties p) {
         this. = cnbs;
         this. = delegateLayer;
         this. = p;
         this. = clusterName;
     }
     
 
     public static FeatureInfo create(String clusterNameURL delegateLayerURL bundlethrows IOException {
         Properties p = new Properties();
         p.load(bundle.openStream());
         String cnbs = p.getProperty("cnbs");
         assert cnbs != null : "Error loading from " + bundle// NOI18N
         TreeSet<Strings = new TreeSet<String>();
         s.addAll(Arrays.asList(cnbs.split(",")));
        FeatureInfo info = new FeatureInfo(clusterNamesdelegateLayerp);
        final String prefix = "nbproject.";
        final String prefFile = "project.file.";
        final String prefXPath = "project.xpath.";
        for (Object k : p.keySet()) {
            String key = (Stringk;
            if (key.startsWith(prefix)) {
                info.nbproject(
                    key.substring(prefix.length()),
                    p.getProperty(key)
                );
            }
            if (key.startsWith(prefFile)) {
                try {
                    info.projectFile(key.substring(prefFile.length()), nullp.getProperty(key));
                } catch (XPathExpressionException ex) {
                    IOException e = new IOException(ex.getMessage());
                    e.initCause(ex);
                    throw e;
                }
            }
            if (key.startsWith(prefXPath)) {
                try {
                    String xpaths = p.getProperty(key);
                    for (String xp : xpaths.split(",")) {
                        info.projectFile(key.substring(prefXPath.length()), xp"");
                    }
                } catch (XPathExpressionException ex) {
                    IOException e = new IOException(ex.getMessage());
                    e.initCause(ex);
                    throw e;
                }
            }
        }
        FileObject fo = info.getXMLFileSystem().findResource("Ergonomics/AntBasedProjectTypes"); // NOI18N
        if (fo != null) {
            for (FileObject o : fo.getChildren()) {
                String type = (String)o.getAttribute("type"); // NOI18N
                info.nbproject(type"org.netbeans.modules.project.ant.AntBasedGenericType"); // NOI18N
            }
        }
        return info;
    }
    public Object getProjectImporter() {
        return .getProperty("projectImporter");
    }
        return .getProperty("mainModule");
    }
        String f = .getProperty("featureModule");
        if (f != null) {
            return f.length() == 0 ? null : f;
        }
        return getPreferredCodeNameBase();
    }
    public final boolean isEnabled() {
        Boolean e = ;
        if (e != null) {
            return e;
        }
        for (ModuleInfo mi : Lookup.getDefault().lookupAll(ModuleInfo.class)) {
            if (.contains(mi.getCodeNameBase())) {
                if (!FeatureManager.showInAU(mi)) {
                    continue;
                }
                return  = mi.isEnabled();
            }
        }
        return  = false;
    }
    public final URL getLayerURL() {
        return ;
    }
    public synchronized FileSystem getXMLFileSystem() {
        if ( == null) {
            if (doParseXML()) {
                URL url = ;
                if (url != null) {
                    try {
                         = new XMLFileSystem(url);
                        return ;
                    } catch (SAXException ex) {
                        ..log(."Cannot parse: " + urlex);
                        Exceptions.printStackTrace(ex);
                    }
                }
            }
             = FileUtil.createMemoryFileSystem();
        }
        return ;
    }

    

Returns:
0 = no 1 = yes 2 = I am interested to be turned on when this project is opened
    int isProject(FeatureProjectFactory.Data data) {
        ..log(."Checking project {0}"data);
        int toRet;
        if (isNbProject(data)) {
            toRet = 1;
        } else {
            if (.isEmpty()) {
                toRet = 0;
            } else {
                toRet = 0;
                for (Object[] required : .keySet()) {
                    String s = (String)required[0];
                    ..log(."    checking file {0}"s);
                    if (data.hasFile(s)) {
                        ..log(."    found"s);
                        Object r1 = required[1];
                        if (data.isDeepCheck() && r1 != null) {
                            XPathExpression e;
                            if (!(r1 instanceof XPathExpression)) {
                                try {
                                    required[1] = e = XPathFactory.newInstance().newXPath().compile((Stringr1);
                                } catch (XPathExpressionException ex) {
                                    ..log(."Cannot parse " + r1ex);
                                    continue;
                                }
                            } else {
                                e = (XPathExpression)r1;
                            }
                            Document content = data.dom(s);
                            try {
                                String res = e.evaluate(content);
                                ..log(
                                    .,
                                    "Parsed result {0} of type {1}",
                                    new Object[] {
                                        resres == null ? null : res.getClass()
                                    }
                                );
                                if (res != null && res.length() > 0) {
                                    toRet = 2;
                                }
                            } catch (XPathExpressionException ex) {
                                ..log(."Cannot parse " + dataex);
                            }
                        } else {
                            toRet = 1;
                        }
                        break;
                    }
                }
            }
        }
        ..log(."  isProject: {0}"toRet);
        return toRet;
    }
    public final Set<StringgetCodeNames() {
        return Collections.unmodifiableSet();
    }
    public boolean isPresent() {
        Boolean p = ;
        if (p != null) {
            return p;
        }
        Set<StringcodeNames = new HashSet<String>(getCodeNames());
        for (ModuleInfo moduleInfo : Lookup.getDefault().lookupAll(ModuleInfo.class)) {
            codeNames.remove(moduleInfo.getCodeNameBase());
        }
        return  = codeNames.isEmpty();
    }
    void clearCache() {
         = null;
         = null;
    }
    @Override
    public String toString() {
        return "FeatureInfo[" +  + "]";
    }
    
    private boolean isNbProject(FeatureProjectFactory.Data data) {
        if (.isEmpty()) {
            return false;
        } else {
            if (!data.hasFile("nbproject/project.xml")) { // NOI18N
                ..log(."    nbproject/project.xml not found"); // NOI18N
                return false;
            }
            if (!data.isDeepCheck()) {
                ..log(."    no deep check, OK"); // NOI18N
                return true;
            }
            String text = data.is("nbproject/project.xml"); // NOI18N
            if (text == null) {
                return false;
            }
            for (String t : .keySet()) {
                final String pattern = "<type>" + t + "</type>"// NOI18N
                if (text.indexOf(pattern) >= 0) { // NOI18N
                    ..log(."    '" + pattern + "' found, OK"); // NOI18N
                    return true;
                } else {
                    ..log(."    '" + pattern + "' not found"); // NOI18N
                }
            }
            ..log(."    not accepting"); // NOI18N
            return false;
        }
    }
    final void nbproject(String prjTypeString clazz) {
        .put(prjTypeclazz);
    }
    final void projectFile(String fileString xpathString clazzthrows XPathExpressionException {
        .put(new Object[] { filexpath }, clazz);
    }
    static Map<String,StringnbprojectTypes() {
        Map<String,Stringmap = new HashMap<StringString>();
        for (FeatureInfo info : FeatureManager.features()) {
            map.putAll(info.nbproject);
        }
        return map;
    }
    static Map<String,StringprojectFiles() {
        Map<String,Stringmap = new HashMap<StringString>();
        for (FeatureInfo info : FeatureManager.features()) {
            for (Map.Entry<Object[], Stringe : info.files.entrySet()) {
                if (e.getValue().length() > 0) {
                    map.put((String)(e.getKey()[0]), e.getValue());
                }
            }
        }
        return map;
    }
    static boolean doParseXML() {
        return !Boolean.getBoolean("org.netbeans.modules.ide.ergonomics.noparse"); // NOI18N
    }
New to GrepCode? Check out our FAQ X