| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 IBM Corporation and others. |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // which accompanies this distribution, and is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // Contributors: |
| // IBM Corporation - initial implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.library.layout; |
| |
| import java.io.File; |
| import java.util.MissingResourceException; |
| import java.util.ResourceBundle; |
| |
| import org.apache.tools.ant.Project; |
| import org.apache.tools.ant.taskdefs.Copy; |
| import org.apache.tools.ant.taskdefs.Expand; |
| import org.apache.tools.ant.types.FileSet; |
| import org.eclipse.epf.common.utils.FileUtil; |
| import org.eclipse.epf.library.LibraryPlugin; |
| import org.eclipse.epf.publish.layout.LayoutPlugin; |
| |
| import com.ibm.icu.util.Calendar; |
| |
| |
| /** |
| * a utility class to handle layout related resources. |
| * |
| * @author Jinhua Xi |
| * @since 1.0 |
| */ |
| public class LayoutResources { |
| |
| private static ResourceBundle resourceBundle; |
| |
| private static ResourceBundle shapeiconBundle; |
| |
| private static String TEMP_LAYOUT_DIR = ""; //$NON-NLS-1$ |
| static { |
| try { |
| String pkg = LayoutResources.class.getPackage().getName(); |
| String resource = LayoutResources.class.getName(); |
| resourceBundle = ResourceBundle.getBundle(resource); |
| shapeiconBundle = ResourceBundle.getBundle(pkg |
| + ".DefaultShapeicons"); //$NON-NLS-1$ |
| |
| /* |
| * TEMP_LAYOUT_DIR = getString("temp_layout_dir"); if ( |
| * TEMP_LAYOUT_DIR != null ) { TEMP_LAYOUT_DIR = |
| * TEMP_LAYOUT_DIR.replace('/', File.separatorChar); } |
| */ |
| |
| // Multiple instances of EPF running different libs are sharing the same layout directory |
| // use timestamp to identify each instance |
| // we need to clean the files when the application exit |
| String userHome = System.getProperty("user.home"); //$NON-NLS-1$ |
| TEMP_LAYOUT_DIR = userHome + File.separator |
| + "EPF" + File.separator + "layout" + File.separator //$NON-NLS-1$ //$NON-NLS-2$ |
| + Long.toHexString(Calendar.getInstance().getTimeInMillis()) + File.separator; |
| |
| File rupTmpDir = new File(TEMP_LAYOUT_DIR); |
| if (!rupTmpDir.exists()) { |
| rupTmpDir.mkdirs(); |
| } else { |
| FileUtil.deleteAllFiles(rupTmpDir.getAbsolutePath()); |
| } |
| |
| } catch (MissingResourceException x) { |
| x.printStackTrace(); |
| resourceBundle = null; |
| } |
| } |
| |
| /** |
| * call this when the application exit |
| */ |
| public static void clear() |
| { |
| try { |
| FileUtil.deleteAllFiles(TEMP_LAYOUT_DIR); |
| |
| // also delete the folder |
| new File(TEMP_LAYOUT_DIR).delete(); |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| |
| // also reset the browser settings so that the layout data will be copied |
| BrowsingLayoutSettings.INSTANCE.setChanged(); |
| } |
| |
| /** |
| * get the default publish path |
| */ |
| public static String getDefaultPublishDir() { |
| return TEMP_LAYOUT_DIR; |
| } |
| |
| /** |
| * get the xsl uri for the given keys |
| * @param key String |
| * @param secondKey String |
| * @return String |
| */ |
| public static String getDefaultXslPath(String key, String secondKey) { |
| String url = getXslUri(key, secondKey); |
| |
| if (url != null) { |
| // resolve the file |
| return LayoutPlugin.getDefault().getLayoutXslPath() + url; |
| } |
| |
| return ""; //$NON-NLS-1$ |
| } |
| |
| /** |
| * get the xsl uri for the given keys |
| * @param key String |
| * @param secondKey String |
| * @return String |
| */ |
| public static String getXslUri(String key, String secondKey) { |
| String url = getString(resourceBundle, key.toLowerCase()); |
| if ((url == null) && (secondKey != null)) { |
| url = getString(resourceBundle, secondKey.toLowerCase()); |
| } |
| |
| if (url == null) { |
| url = getString(resourceBundle, "default"); //$NON-NLS-1$ |
| } |
| |
| |
| return url; |
| } |
| |
| /** |
| * get the default shape icon url |
| * @param key String |
| * @return String |
| */ |
| public static String getDefaultShapeiconUrl(String key) { |
| String url = getString(shapeiconBundle, key); |
| if (url == null) { |
| url = getString(shapeiconBundle, "general"); //$NON-NLS-1$ |
| } |
| |
| return url; |
| } |
| |
| private static String getString(ResourceBundle bundle, String key) { |
| try { |
| return (bundle != null) ? bundle.getString(key) : null; |
| } catch (MissingResourceException e) { |
| return null; |
| } |
| } |
| |
| /** |
| * get resource string for the key |
| * @param key |
| * @return String |
| */ |
| public static String getString(String key) { |
| return getString(resourceBundle, key); |
| } |
| |
| /** |
| * copy files from one dir to another |
| * @param fromDir String |
| * @param toDir String |
| */ |
| public static void copyDir(String fromDir, String toDir) { |
| |
| String includes = "*.*, **/css/*.*, **/icons/*.*, **/images/*.*, **/resources/*.*, **/stylesheets/*.*, **/scripts/*.*"; //$NON-NLS-1$ |
| copyDir(fromDir, toDir, includes, null); |
| } |
| |
| /** |
| * copy files from one dir to another, with filters |
| * @param fromDir String |
| * @param toDir String |
| * @param includes String |
| * @param excludes String |
| */ |
| public static void copyDir(String fromDir, String toDir, String includes, |
| String excludes) { |
| copyDir(new File(fromDir), new File(toDir), includes, excludes); |
| } |
| |
| /** |
| * copy dir |
| * |
| * @param fromDir File |
| * @param toDir File |
| * @param includes String |
| * @param excludes String |
| */ |
| public static void copyDir(File fromDir, File toDir, String includes, |
| String excludes) |
| { |
| copyDir(fromDir, toDir, includes, excludes, true); |
| } |
| |
| /** |
| * copy dir |
| * @param fromDir File |
| * @param toDir File |
| * @param includes String |
| * @param excludes String |
| * @param overwrite boolean true to override existing files |
| */ |
| public static void copyDir(File fromDir, File toDir, String includes, |
| String excludes, boolean overwrite) { |
| Copy cp = new Copy(); |
| cp.setOverwrite(overwrite); // only cpoy new files or newer files |
| if (includes != null || excludes != null) { |
| FileSet set = new FileSet(); |
| if (includes != null) { |
| set.setIncludes(includes); |
| } |
| |
| if (excludes != null) { |
| set.setExcludes(excludes); |
| } |
| |
| set.setDir(fromDir); |
| cp.addFileset(set); |
| } |
| |
| cp.setTodir(toDir); |
| cp.setProject(new Project()); |
| cp.execute(); |
| |
| } |
| |
| /** |
| * copy the layout files from the library layout path to the specified |
| * publish folder |
| * |
| * @param toDir |
| */ |
| public static void copyLayoutFiles(String toDir) { |
| // copy the layout files to the temp folder |
| String sourceDir = LayoutPlugin.getDefault().getLayoutPath(); |
| copyDir(sourceDir, toDir); |
| |
| try { |
| LibraryPlugin.getDefault().copyLocalizedFiles( |
| LayoutPlugin.LAYOUT_SCRIPTS_PATH, |
| new File(toDir, LayoutPlugin.LAYOUT_SCRIPTS_FOLDER), true, |
| false); |
| |
| } catch (Exception ex) { |
| ex.printStackTrace(); |
| } |
| } |
| |
| public static void unzip(File zipFile, File toDir) { |
| Expand exp = new Expand(); |
| exp.setOverwrite(true); |
| exp.setSrc(zipFile); |
| exp.setDest(toDir); |
| exp.setProject(new Project()); |
| exp.execute(); |
| |
| } |
| } |