visualweb.project.jsfloader/test/unit/src/org/netbeans/modules/visualweb/project/jsfloader/test/SetupUtils.java
author Jesse Glick <jglick@netbeans.org>
Wed, 23 Mar 2011 17:17:42 -0400
changeset 3214 cf80c1d5c3ea
parent 2927 18a84774d1c7
permissions -rw-r--r--
Really making tests compilable.
     1 /*
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3  *
     4  * Copyright 1997-2010 Oracle and/or its affiliates. All rights reserved.
     5  *
     6  * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
     7  * Other names may be trademarks of their respective owners.
     8  *
     9  * The contents of this file are subject to the terms of either the GNU
    10  * General Public License Version 2 only ("GPL") or the Common
    11  * Development and Distribution License("CDDL") (collectively, the
    12  * "License"). You may not use this file except in compliance with the
    13  * License. You can obtain a copy of the License at
    14  * http://www.netbeans.org/cddl-gplv2.html
    15  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    16  * specific language governing permissions and limitations under the
    17  * License.  When distributing the software, include this License Header
    18  * Notice in each file and include the License file at
    19  * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    20  * particular file as subject to the "Classpath" exception as provided
    21  * by Oracle in the GPL Version 2 section of the License file that
    22  * accompanied this code. If applicable, add the following below the
    23  * License Header, with the fields enclosed by brackets [] replaced by
    24  * your own identifying information:
    25  * "Portions Copyrighted [year] [name of copyright owner]"
    26  * 
    27  * If you wish your version of this file to be governed by only the CDDL
    28  * or only the GPL Version 2, indicate your decision by adding
    29  * "[Contributor] elects to include this software in this distribution
    30  * under the [CDDL or GPL Version 2] license." If you do not indicate a
    31  * single choice of license, a recipient has the option to distribute
    32  * your version of this file under either the CDDL, the GPL Version 2 or
    33  * to extend the choice of license to its licensees as provided above.
    34  * However, if you add GPL Version 2 code and therefore, elected the GPL
    35  * Version 2 license, then the option applies only if the new code is
    36  * made subject to such option by the copyright holder.
    37  * 
    38  * Contributor(s):
    39  * 
    40  * Portions Copyrighted 2007 Sun Microsystems, Inc.
    41  */
    42 
    43 package org.netbeans.modules.visualweb.project.jsfloader.test;
    44 
    45 import java.io.File;
    46 import java.io.FileInputStream;
    47 import java.io.IOException;
    48 import java.io.OutputStream;
    49 import java.util.Arrays;
    50 import java.util.Collections;
    51 import java.util.Enumeration;
    52 import java.util.zip.ZipEntry;
    53 import java.util.zip.ZipInputStream;
    54 import javax.swing.event.ChangeEvent;
    55 import org.netbeans.api.project.Project;
    56 import org.netbeans.api.project.ProjectManager;
    57 import org.netbeans.api.project.ui.OpenProjects;
    58 import org.netbeans.junit.MockServices;
    59 import org.netbeans.modules.visualweb.project.jsfloader.JsfJavaDataLoader;
    60 import org.netbeans.modules.visualweb.project.jsfloader.JsfJspDataLoader;
    61 import org.openide.filesystems.FileLock;
    62 import org.openide.filesystems.FileObject;
    63 import org.openide.filesystems.FileUtil;
    64 import org.openide.loaders.DataLoader;
    65 import org.openide.loaders.DataLoaderPool;
    66 import org.openide.util.Lookup;
    67 import org.openide.util.LookupEvent;
    68 import org.openide.util.LookupListener;
    69 
    70 /**
    71  *
    72  * @author quynguyen
    73  */
    74 public class SetupUtils {
    75     public static Project setup(File workDir) throws IOException {
    76         File userDir = new File(workDir, "userdir");
    77         userDir.mkdir();
    78         System.getProperties().put("netbeans.user", userDir.getAbsolutePath());
    79 
    80         MockServices.setServices(SetupUtils.DefaultPool.class, JsfJspDataLoader.class, JsfJavaDataLoader.class);
    81         
    82         String zipResource = "VWJavaEE5.zip";
    83         String zipPath = SetupUtils.class.getResource(zipResource).getPath();
    84         if (zipPath == null) {
    85             throw new IOException("Could not load zip resource: " + zipResource);
    86         }
    87         
    88         File archiveFile = new File(zipPath);
    89 
    90         FileObject destFileObj = FileUtil.toFileObject(workDir);
    91         unZipFile(archiveFile, destFileObj);
    92         
    93         if (!destFileObj.isValid()) {
    94             throw new IOException("FileObject for project directory not valid");
    95         }
    96         
    97         FileObject testApp = destFileObj.getFileObject("VWJavaEE5");
    98         System.out.println("Children of VWJavaEE5:" + Arrays.toString(testApp.getChildren()));
    99 
   100         Project project = ProjectManager.getDefault().findProject(testApp);
   101         
   102         if (project == null) {
   103             throw new IOException("Could not load project");
   104         }
   105         
   106         OpenProjects.getDefault().open(new Project[]{project}, false);
   107         return project;
   108     }
   109 
   110     public static JsfJavaDataLoader getJavaLoader() {
   111         return JsfJavaDataLoader.findObject(JsfJavaDataLoader.class, true);
   112     }
   113 
   114     public static JsfJspDataLoader getJspLoader() {
   115         return JsfJspDataLoader.findObject(JsfJspDataLoader.class, true);
   116     }
   117     
   118     private static void unZipFile(File archiveFile, FileObject destDir) throws IOException {
   119         FileInputStream fis = new FileInputStream(archiveFile);
   120         try {
   121             ZipInputStream str = new ZipInputStream(fis);
   122             ZipEntry entry;
   123             while ((entry = str.getNextEntry()) != null) {
   124                 if (entry.isDirectory()) {
   125                     FileUtil.createFolder(destDir, entry.getName());
   126                 } else {
   127                     FileObject fo = FileUtil.createData(destDir, entry.getName());
   128                     FileLock lock = fo.lock();
   129                     try {
   130                         OutputStream out = fo.getOutputStream(lock);
   131                         try {
   132                             FileUtil.copy(str, out);
   133                         } finally {
   134                             out.close();
   135                         }
   136                     } finally {
   137                         lock.releaseLock();
   138                     }
   139                 }
   140             }
   141         } finally {
   142             fis.close();
   143         }
   144     }
   145     
   146     /**
   147      * Taken from DataLoaderPool.DefaultPool to override NbLoaderPool
   148      * 
   149      * Special pool for unit testing etc.
   150      * Finds all relevant data loaders in default lookup.
   151      * 
   152      */
   153     public static final class DefaultPool extends DataLoaderPool implements LookupListener {
   154         
   155         private final Lookup.Result<DataLoader> result;
   156         
   157         public DefaultPool() {
   158             result = Lookup.getDefault().lookupResult(DataLoader.class);
   159             result.addLookupListener(this);
   160         }
   161         
   162         protected Enumeration<? extends DataLoader> loaders() {
   163             return Collections.enumeration(result.allInstances());
   164         }
   165         
   166         public void resultChanged(LookupEvent e) {
   167             fireChangeEvent(new ChangeEvent(this));
   168         }
   169         
   170     }
   171 }