blob: 6ec050e4b6acd16f707d24804011405070998d11 [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 org.netbeans.modules.projectimport.eclipse.core;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
import org.openide.filesystems.FileUtil;
import org.openide.util.Exceptions;
import org.openide.util.NbCollections;
/**
* Serveral helpers for parsing, managing, loading Eclipse projects and
* workspace metadata.
*
* @author mkrauskopf
*/
public class EclipseUtils {
/**
* Returns whether there is a valid project in the given
* <code>projectDir</code>.
*/
public static boolean isRegularProject(String projectDir) {
return projectDir != null &&
isRegularProject(new File(projectDir.trim()));
}
/**
* Returns whether there is a valid project in the given
* <code>projectDir</code>.
*/
public static boolean isRegularProject(File projectDir) {
return projectDir != null
&& FileUtil.toFileObject(FileUtil.normalizeFile(projectDir)) != null
&& projectDir.isDirectory()
&& new File(projectDir, EclipseProject.PROJECT_FILE).isFile();
}
/**
* Returns whether there is a valid workspace in the given
* <code>workspaceDir</code>.
*/
public static boolean isRegularWorkSpace(File workspaceDir) {
assert workspaceDir == null || workspaceDir.equals(FileUtil.normalizeFile(workspaceDir)) : "#137407 problem: " + workspaceDir + " vs. " + FileUtil.normalizeFile(workspaceDir); //NOI18N
return workspaceDir != null
&& FileUtil.toFileObject(workspaceDir) != null
&& workspaceDir.isDirectory()
&& new File(workspaceDir, Workspace.CORE_PREFERENCE).isFile()
&& new File(workspaceDir, Workspace.RESOURCE_PROJECTS_DIR).isDirectory();
}
private static final String TMP_NAME =
"NB___TMP___ENOUGH___UNIQUE___CONSTANT___"; // NOI18N
public static boolean isWritable(String projectDestination) {
File tmpDir = new File(projectDestination.trim(),
(TMP_NAME + System.currentTimeMillis()));
if (tmpDir.mkdirs()) {
tmpDir.delete();
return true;
}
return false;
}
/**
* Load properties from a given <code>file</code>.
* <p>
* <strong>Note: package private for unit tests only.</strong>
*
* @throws IOException when reading file failed
*/
static Map<String,String> loadProperties(File file) throws IOException {
InputStream propsIS = new BufferedInputStream(new FileInputStream(file));
Properties properties = new Properties();
try {
properties.load(propsIS);
} finally {
propsIS.close();
}
return NbCollections.checkedMapByFilter(properties, String.class, String.class, true);
}
/**
* Splits Eclipse variable into variable and path, eg. MAVEN/commons/1.jar
* is split into MAVEN and /commons/1.jar.
*/
public static String[] splitVariable(String v) {
int i = v.replace('\\', '/').indexOf('/');
if (i == -1) {
i = v.length();
}
return new String[]{v.substring(0, i), v.substring(i)};
}
/**
* Splits Eclipse internal jar reference into project name and path wihtin project,
* eg. /some-project/commons/1.jar is split into some-project and /commons/1.jar.
*/
public static String[] splitProject(String v) {
assert v.startsWith("/") : v; //NOI18N
int i = v.replace('\\', '/').indexOf('/', 1); //NOI18N
if (i == -1) {
i = v.length();
}
return new String[]{v.substring(1, i), v.substring(i)};
}
public static void tryLoad(Properties p, File base, String path) {
if (base == null) {
return;
}
File f = new File(base, path);
tryLoad(p, f);
}
public static void tryLoad(Properties p, File f) {
if (!f.isFile()) {
return;
}
try {
InputStream is = new FileInputStream(f);
try {
p.load(is);
} finally {
is.close();
}
} catch (IOException x) {
Exceptions.printStackTrace(x);
}
}
}