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]"
  *
  * Contributor(s):
  *
  * The Original Software is NetBeans. The Initial Developer of the Original
  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2008 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.modules.ide.ergonomics.fod;
 
 import java.util.Set;

Author(s):
Jirka Rechtacek
 
 public class ModulesInstaller {
     
     private RequestProcessor.Task installTask = null;
     private ProgressHandle downloadHandle;
     private ProgressHandle verifyHandle;
     private ProgressHandle installHandle;
     private final FindComponentModules finder;
     private final ProgressMonitor progressMonitor;
     
     public ModulesInstaller (Collection<UpdateElementmodulesFindComponentModules find) {
         this(modulesfindnull);
     }
     
     public ModulesInstaller (Collection<UpdateElementmodulesFindComponentModules findProgressMonitor progressMonitor) {
         if (modules == null || modules.isEmpty ()) {
             throw new IllegalArgumentException ("Cannot construct InstallerMissingModules with null or empty Collection " + modules);
         }
          = modules;
          = find;
         if (progressMonitor != null) {
            this. = progressMonitor;
        } else {
        }
    }
    
    public static boolean installModules (FeatureInfo info) {
        return installModules(nullinfo);
    }
    static boolean success = false;
    public static boolean installModules (ProgressMonitor monitorFeatureInfo info) {
        assert ! SwingUtilities.isEventDispatchThread () : "Cannot run in EQ!";
        
        FindComponentModules findModules = new FindComponentModules(info);
        Collection<UpdateElementtoInstall = findModules.getModulesForInstall();
        Collection<UpdateElementtoEnable = findModules.getModulesForEnable();
        if (toInstall != null && !toInstall.isEmpty()) {
            ModulesInstaller installer = new ModulesInstaller(toInstallfindModulesmonitor);
            installer.getInstallTask ().schedule (10);
            installer.getInstallTask ().waitFinished();
            findModules = new FindComponentModules(info);
             = findModules.getModulesForInstall ().isEmpty ();
        } else if (toEnable != null && !toEnable.isEmpty()) {
            ModulesActivator enabler = new ModulesActivator(toEnablefindModulesmonitor);
            enabler.getEnableTask ().schedule (100);
            enabler.getEnableTask ().waitFinished();
             = true;
        }
        
        if () {
            FoDFileSystem.getInstance().refresh();
        }
        
        return ;
    }
    public void assignDownloadHandle (ProgressHandle handle) {
        this. = handle;
    }
    
    public void assignVerifyHandle (ProgressHandle handle) {
        this. = handle;
    }
    
    public void assignInstallHandle (ProgressHandle handle) {
        this. = handle;
    }
    
    public RequestProcessor.Task getInstallTask () {
        if ( == null) {
             = createInstallTask ();
        }
        return ;
    }
    
    private RequestProcessor.Task createInstallTask () {
        assert  == null || .isFinished () : "The Install Task cannot be started nor scheduled.";
         = FeatureManager.getInstance().create(new InstallOrActivateTask(this));
        return ;
    }
    
    final void installMissingModules () {
        try {
            doInstallMissingModules ();
        } catch (Exception x) {
            JButton tryAgain = new JButton ();
            tryAgain.addActionListener(new ActionListener () {
                public void actionPerformed (ActionEvent e) {
                    if ( != null) {
                        try {
                            .getSupport ().doCancel ();
                        } catch (Exception ex) {
                            Logger.getLogger (ModulesInstaller.class.getName ()).
                                    log (.ex.getLocalizedMessage (), ex);
                        }
                    }
                    RequestProcessor.Task task = getInstallTask ();
                    if (task != null) {
                        task.schedule (10);
                    }
                }
            });
            Logger.getLogger (ModulesInstaller.class.getName ()).log (.x.getLocalizedMessage (), x);
            tryAgain.setEnabled (getInstallTask () != null);
            Mnemonics.setLocalizedText (tryAgaingetBundle ("InstallerMissingModules_TryAgainButton"));
            NotifyDescriptor nd = new NotifyDescriptor (
                    getErrorNotifyPanel (x),
                    getBundle ("InstallerMissingModules_ErrorPanel_Title"),
                    .,
                    .,
                    new Object [] { tryAgain. },
                    .
                    );
            DialogDisplayer.getDefault ().notifyLater (nd);
        } finally {
            FoDFileSystem.getInstance().refresh();
        }
    }
    
    private JComponent getErrorNotifyPanel (Exception x) {
        JTextArea area = new JTextArea ();
        area.setWrapStyleWord (true);
        area.setLineWrap (true);
        area.setEditable (false);
        area.setRows (15);
        area.setColumns (40);
        area.setOpaque (false);
        area.setText (getBundle ("InstallerMissingModules_ErrorPanel"x.getLocalizedMessage (), x));
        return area;
    }
    private void doInstallMissingModules () throws OperationException {
        assert ! SwingUtilities.isEventDispatchThread () : "Cannot be called in EQ.";
         = null;
        for (UpdateElement module : ) {
            if ( == null) {
                boolean isNewOne = module.getUpdateUnit ().getInstalled () == null;
                if (isNewOne) {
                     = OperationContainer.createForInstall ();
                } else {
                     = OperationContainer.createForUpdate ();
                }
            }
            if (.canBeAdded (module.getUpdateUnit (), module)) {
                .add (module);
            }
        }
        if (.listAll ().isEmpty ()) {
            return ;
        }
        assert .listInvalid ().isEmpty () :
            "No invalid Update Elements " + .listInvalid ();
        if (! .listInvalid ().isEmpty ()) {
            throw new IllegalArgumentException ("Some are invalid for install: " + .listInvalid ());
        }
        InstallSupport installSupport = .getSupport ();
        if ( == null) {
             = ProgressHandleFactory.createHandle (
                getBundle ("InstallerMissingModules_Download",
        }
        Validator v = installSupport.doDownload (false);
        if ( == null) {
             = ProgressHandleFactory.createHandle (
                    getBundle ("InstallerMissingModules_Verify"));
            }
        Installer i = installSupport.doValidate (v);
        if ( == null) {
             = ProgressHandleFactory.createHandle (
                    getBundle ("InstallerMissingModules_Install"));
            }
        Restarter r = installSupport.doInstall (i);
        if (r != null) {
            installSupport.doRestartLater (r);
        } else {
            waitToModuleLoaded ();
        }
        /// XXX FindBrokenModules.clearModulesForRepair ();
    }
    
    public static String presentUpdateElements (Collection<UpdateElementelems) {
        StringBuilder sb = new StringBuilder();
        String sep = "";
        Set<Stringused = new HashSet<String>();
        
        for (UpdateElement el : elems) {
            if (!used.add(el.getCategory())) {
                continue;
            }
            sb.append(sep);
            sb.append(el.getCategory());
            if (sb.length() > 30) {
                sb.append("..."); // NOI18N
                break;
            }
            sep = ", "// NOI18N
        }
        return sb.toString();
    }
    private void waitToModuleLoaded () {
        assert ! SwingUtilities.isEventDispatchThread () : "Cannot be called in EQ.";
        for (UpdateElement m : ) {
           while (!m.isEnabled()) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                    Exceptions.printStackTrace(ex);
                }
           }
        }
        
    }
    
    private static String getBundle (String keyObject... params) {
        return NbBundle.getMessage (ModulesInstaller.classkeyparams);
    }
    
New to GrepCode? Check out our FAQ X