blob: 15b0827b3810e4613d192b83b79e075d3c23992e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package projects.apitest;
import java.util.logging.Level;
import java.util.logging.Logger;
import projects.apitest.ProjectOpenListener;
import java.io.File;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.ui.OpenProjects;
import org.openide.filesystems.FileUtil;
import org.openide.util.Mutex;
/**
*
* @author jaromiruhrik
*/
public class Utilities {
static Logger logger = Logger.getLogger(Utilities.class.getName());
/** Creates a new instance of Utilities */
public Utilities() {
}
/** Opens project in specified directory.
* @param projectDir a directory with project to open
* @return Project instance of opened project
*/
public static Project openProject(File projectDir) {
final ProjectOpenListener listener = new ProjectOpenListener();
try {
// open project
final Project project = FileOwnerQuery.getOwner(FileUtil.toFileObject(projectDir));
// posting the to AWT event thread
Mutex.EVENT.writeAccess(new Runnable() {
public void run() {
OpenProjects.getDefault().addPropertyChangeListener(listener);
OpenProjects.getDefault().open(new Project[]{project},false);
}
});
// WAIT PROJECT OPEN - start
// We need to wait until project is open and then we can start to
// wait when scanning finishes. If we don't wait, scanning is started
// too early and finishes immediatelly.
listener.waitFinished();
// try {
// waitThread.join(60000L); // wait 1 minute at the most
// } catch (InterruptedException iex) {
// ErrorManager.getDefault().notify(ErrorManager.EXCEPTION, iex);
// }
// if (waitThread.isAlive()) {
// // time-out expired, project not opened -> interrupt the wait thread
// ErrorManager.getDefault().log(ErrorManager.USER, "Project not opened in 60 second.");
// waitThread.interrupt();
// }
// // WAIT PROJECT OPEN - end
// // wait until metadata scanning is finished
// waitScanFinished();
return project;
} catch (Exception ex) {
logger.log(Level.SEVERE, null, ex);
return null;
} finally {
OpenProjects.getDefault().removePropertyChangeListener(listener);
}
}
/** Opens project on specified path.
* @param projectPath path to a directory with project to open
* @return Project instance of opened project
*/
public static Object openProject(String projectPath) {
return openProject(new File(projectPath));
}
/** Closes project with given name.
* @param name system or display name of project to be closed.
* @return true if project is closed, false in other cases.
*/
public static boolean closeProject(String name){
Project[] projectList = OpenProjects.getDefault().getOpenProjects();
for (int i = 0; i < projectList.length; i++) {
final Project project = projectList[i];
if(ProjectUtils.getInformation(project).getDisplayName().equals(name) || ProjectUtils.getInformation(project).getName().equals(name)){
Mutex.EVENT.writeAccess(new Runnable(){
public void run(){
OpenProjects.getDefault().close(new Project[] {project});
}
});
return true;
}
}
return false;
}
public static boolean deleteProjectFolder(String projectFolder){
File folder = new File(projectFolder);
return deleteDirContent(folder);
}
private static boolean deleteDirContent(File dir){
File[] files = dir.listFiles();
if(files != null){
for (int i = 0; i < files.length; i++) {
if(files[i].isFile()){
files[i].delete();
}else{
deleteDirContent(files[i]);
}
}
}
return dir.delete();
}
}