visualweb.dataconnectivity/test/unit/src/org/netbeans/modules/visualweb/dataconnectivity/test/utils/SetupProject.java
author Jesse Glick <jglick@netbeans.org>
Wed, 23 Mar 2011 17:17:42 -0400
changeset 3214 cf80c1d5c3ea
parent 2924 0db151c651a2
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.dataconnectivity.test.utils;
    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.openide.filesystems.FileLock;
    60 import org.openide.filesystems.FileObject;
    61 import org.openide.filesystems.FileUtil;
    62 import org.openide.loaders.DataLoader;
    63 import org.openide.loaders.DataLoaderPool;
    64 import org.openide.util.Lookup;
    65 import org.openide.util.LookupEvent;
    66 import org.openide.util.LookupListener;
    67 
    68 /**
    69  *
    70  * @author JohnBaker
    71  */
    72 public class SetupProject {    
    73     private static String RESOURCEPATH = ".." + System.getProperty("file.separator") + "resources" +  System.getProperty("file.separator");
    74     public static Project setup(File workDir) throws IOException {
    75         assert(workDir != null);
    76         File userDir = new File(workDir, "userdir");
    77         userDir.mkdir();
    78         System.getProperties().put("netbeans.user", userDir.getAbsolutePath());   
    79         System.out.println(userDir.getAbsolutePath());
    80 //        String zipResource = RESOURCEPATH + "VWJavaEE5.zip";
    81         String zipResource =  "VWJavaEE5.zip";
    82         System.out.println("resource = " + zipResource);
    83 
    84         String zipPath = SetupProject.class.getResource(zipResource).getPath();
    85         if (zipPath == null) {
    86             throw new IOException("Could not load zip resource: " + RESOURCEPATH + zipResource);
    87         }
    88         
    89         File archiveFile = new File(zipPath);
    90 
    91         FileObject destFileObj = FileUtil.toFileObject(workDir);
    92         unZipFile(archiveFile, destFileObj);
    93         
    94         if (!destFileObj.isValid()) {
    95             throw new IOException("FileObject for project directory not valid");
    96         }
    97         
    98         MockServices.setServices(SetupProject.DefaultPool.class);
    99         FileObject testApp = destFileObj.getFileObject("VWJavaEE5");
   100         System.out.println("Children of VWJavaEE5:" + Arrays.toString(testApp.getChildren()));
   101                 
   102         Project project = ProjectManager.getDefault().findProject(testApp);
   103         
   104         if (project == null) {
   105             throw new IOException("Could not load project");
   106         }
   107         
   108         OpenProjects.getDefault().open(new Project[]{project}, false);
   109         return project;
   110     }
   111 
   112     private static void unZipFile(File archiveFile, FileObject destDir) throws IOException {
   113         FileInputStream fis = new FileInputStream(archiveFile);
   114         try {
   115             ZipInputStream str = new ZipInputStream(fis);
   116             ZipEntry entry;
   117             while ((entry = str.getNextEntry()) != null) {
   118                 if (entry.isDirectory()) {
   119                     FileUtil.createFolder(destDir, entry.getName());
   120                 } else {
   121                     FileObject fo = FileUtil.createData(destDir, entry.getName());
   122                     FileLock lock = fo.lock();
   123                     try {
   124                         OutputStream out = fo.getOutputStream(lock);
   125                         try {
   126                             FileUtil.copy(str, out);
   127                         } finally {
   128                             out.close();
   129                         }
   130                     } finally {
   131                         lock.releaseLock();
   132                     }
   133                 }
   134             }
   135         } finally {
   136             fis.close();
   137         }
   138     }
   139 
   140  /**
   141      * Taken from DataLoaderPool.DefaultPool to override NbLoaderPool
   142      * 
   143      * Special pool for unit testing etc.
   144      * Finds all relevant data loaders in default lookup.
   145      * 
   146      */
   147     public static final class DefaultPool extends DataLoaderPool implements LookupListener {
   148         
   149         private final Lookup.Result<DataLoader> result;
   150         
   151         public DefaultPool() {
   152             result = Lookup.getDefault().lookupResult(DataLoader.class);
   153             result.addLookupListener(this);
   154         }
   155         
   156         protected Enumeration<? extends DataLoader> loaders() {
   157             return Collections.enumeration(result.allInstances());
   158         }
   159         
   160         public void resultChanged(LookupEvent e) {
   161             fireChangeEvent(new ChangeEvent(this));
   162         }
   163         
   164     }
   165 
   166 }