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.List;

Author(s):
Jirka Rechtacek
 
     @ServiceProvider(service=FileSystem.class),
     @ServiceProvider(service=FoDFileSystem.class)
 })
 public final class FoDFileSystem extends MultiFileSystem
     private static final LayerCacheManager manager = LayerCacheManager.create("all-ergonomics.dat"); // NOI18N
     final static Logger LOG = Logger.getLogger (FoDFileSystem.class.getPackage().getName());
     private static RequestProcessor RP = new RequestProcessor("Ergonomics"); // NOI18N
     private RequestProcessor.Task refresh = .create(thistrue);
     private Lookup.Result<ProjectFactoryfactories;
     private Lookup.Result<?> ants;
     private boolean forcedRefresh;
     private final ChangeListener weakL;
 
     public FoDFileSystem() {
         setPropagateMasks(true);
          = WeakListeners.change(this, FeatureManager.getInstance());
         FeatureManager.getInstance().addChangeListener();
         FileSystem fs;
         try {
             fs = .loadCache();
             if (fs != null) {
                 .fine("Using cached layer"); // NOI18N
                 setDelegates(fs);
                 return;
             }
         } catch (IOException ex) {
             .log(."Cannot read cache"ex); // NOI18N
         }
        refresh();
    }
    public static FoDFileSystem getInstance() {
        return Lookup.getDefault().lookup(FoDFileSystem.class);
    }
    public void refresh() {
        .schedule(0);
        .waitFinished();
    }
    public void refreshForce() {
         = true;
        .schedule(0);
        .waitFinished();
    }
    public void waitFinished() {
        .waitFinished();
    }
    public void run() {
        boolean empty = true;
        .fine("collecting layers"); // NOI18N
        List<URLurls = new ArrayList<URL>();
        urls.add(0, FoDFileSystem.class.getResource("common.xml")); // NOI18N
        for (FeatureInfo info : FeatureManager.features()) {
            if (!info.isPresent()) {
                continue;
            }
            .log(."adding feature {0}"info.clusterName); // NOI18N
            if (info.getLayerURL() != null) {
                urls.add(info.getLayerURL());
            }
            if (info.isEnabled()) {
                empty = false;
            }
        }
        if (empty && noAdditionalProjects() && !.) {
            .fine("adding default layer"); // NOI18N
            urls.add(0, FoDFileSystem.class.getResource("default.xml")); // NOI18N
        }
        if () {
             = false;
            .log(."Forced refresh. Setting delegates to empty"); // NOI18N
            setDelegates();
            .log(."New delegates count: {0}"urls.size()); // NOI18N
            .log(."{0}"urls); // NOI18N
        }
        .log(."delegating to {0} layers"urls.size()); // NOI18N
        .log(."{0}"urls); // NOI18N
        try {
            FileSystem fs = getDelegates().length == 0 ?
                .createEmptyFileSystem() : getDelegates()[0];
            fs = .store(fsurls);
            setDelegates(fs);
        } catch (IOException ex) {
            .log(."Cannot save cache"ex);
        }
        .fine("done");
        FeatureManager.dumpModules();
    }
    public FeatureInfo whichProvides(FileObject template) {
        String path = template.getPath();
        for (FeatureInfo info : FeatureManager.features()) {
            FileSystem fs = info.getXMLFileSystem();
            if (fs.findResource(path) != null) {
                return info;
            }
        }
        return null;
    }
    
    public URL getDelegateFileSystem(FileObject template) {
        String path = template.getPath();
        for (FeatureInfo info : FeatureManager.features()) {
            FileSystem fs = info.getXMLFileSystem();
            if (fs.findResource(path) != null) {
                return info.getLayerURL();
            }
        }
        return null;
    }
    @Override
    public void stateChanged(ChangeEvent e) {
        .schedule(500);
    }
    @Override
    public void resultChanged(LookupEvent ev) {
        .schedule(0);
    }
    private boolean noAdditionalProjects() {
        if ( == null) {
             = Lookup.getDefault().lookupResult(ProjectFactory.class);
            .addLookupListener(this);
            
             = Lookup.getDefault().lookupResult(AntBasedProjectType.class);
            .addLookupListener(this);
        }
        for (ProjectFactory pf : .allInstances()) {
            if (pf.getClass().getName().contains("AntBasedProjectFactorySingleton")) { // NOI18N
                continue;
            }
            if (pf.getClass().getName().startsWith("org.netbeans.modules.ide.ergonomics")) { // NOI18N
                continue;
            }
            return false;
        }
        return .allItems().isEmpty();
    }
New to GrepCode? Check out our FAQ X