initial contribution
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.wiki / src / net / sourceforge / phpeclipse / wiki / preferences / Util.java
diff --git a/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/preferences/Util.java b/archive/net.sourceforge.phpeclipse.wiki/src/net/sourceforge/phpeclipse/wiki/preferences/Util.java
new file mode 100644 (file)
index 0000000..4d154f7
--- /dev/null
@@ -0,0 +1,197 @@
+package net.sourceforge.phpeclipse.wiki.preferences;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.plog4u.wiki.filter.FilterUtil;
+
+public class Util {
+  public static Shell findShell() {
+    IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+    if (window != null) {
+      return window.getShell();
+    }
+    Display display = Display.getCurrent();
+    if (display == null) {
+      display = Display.getDefault();
+      return display.getActiveShell();
+    }
+    // worst case, just create our own.
+    return new Shell(WikiEditorPlugin.getStandardDisplay());
+  }
+
+  public static String getProjectsWikiOutputPath(IResource resource, String key) {
+    return getOverlayedPrefProjectValue(resource, WikiProjectPreferences.PREF_ID, key);
+    //    int index = temp.indexOf(File.pathSeparatorChar);
+    //    if (index >= 0) {
+    //      temp = temp.substring(0, index);
+    //    }
+    //    return temp;
+  }
+
+  public static String getPreferenceValue(IResource resource, String key) {
+    return getOverlayedPrefProjectValue(resource, WikiProjectPreferences.PREF_ID, key);
+  }
+
+  public static String getHTMLFileName(IFile file, String binBasePath, String srcBasePath) {
+    StringBuffer htmlBuffer = new StringBuffer();
+    String htmlName = null;
+    //    String srcBasePath = Util.getWikiTextsPath(file);
+    //    String fileName = file.getProjectRelativePath().toString();
+    String fileName = file.getLocation().toString();
+    if (fileName.startsWith(srcBasePath)) {
+      fileName = fileName.substring(srcBasePath.length());
+      if (fileName.charAt(0) != '/') {
+        fileName = "/" + fileName;
+      }
+      int index = fileName.lastIndexOf(".wp");
+      if (index >= 0) {
+        htmlName = binBasePath + fileName.substring(0, index) + ".html";
+      } else {
+        htmlName = binBasePath + fileName;
+      }
+    }
+    return htmlName;
+  }
+
+  public static String getOverlayedPrefProjectValue(IResource resource, String pageId, String key) {
+    IProject project = resource.getProject();
+    String value = null;
+    if (useProjectSettings(project, pageId)) {
+      value = getProperty(resource, pageId, key);
+    }
+    if (value != null)
+      return value;
+    return WikiEditorPlugin.getDefault().getPreferenceStore().getString(key);
+  }
+
+  public static String getOverlayedPrefResourceValue(IResource resource, String pageId, String key) {
+    String value = null;
+    if (useProjectSettings(resource, pageId)) {
+      value = getProperty(resource, pageId, key);
+    }
+    if (value != null)
+      return value;
+    return WikiEditorPlugin.getDefault().getPreferenceStore().getString(key);
+  }
+
+  private static String getProperty(IResource resource, String pageId, String key) {
+    try {
+      return resource.getPersistentProperty(new QualifiedName(pageId, key));
+    } catch (CoreException e) {
+    }
+    return null;
+  }
+
+  private static void setProperty(IResource resource, String pageId, String key, String value) {
+    try {
+      resource.setPersistentProperty(new QualifiedName(pageId, key), value);
+    } catch (CoreException e) {
+    }
+  }
+
+  private static boolean useProjectSettings(IResource resource, String pageId) {
+    String use = getProperty(resource, pageId, FieldEditorOverlayPage.USEPROJECTSETTINGS);
+    return "true".equals(use);
+  }
+
+  public static void setWikiTextsPath(IProject project) {
+    String value = project.getLocation().toString();
+    IPreferenceStore store = WikiEditorPlugin.getDefault().getPreferenceStore();
+    String globalBasePath = store.getString(WikiEditorPlugin.WIKI_TEXTS_BASE_PATH);
+    if (globalBasePath == null || globalBasePath.equals("")) {
+      store.setValue(WikiEditorPlugin.WIKI_TEXTS_BASE_PATH, value + "/wpsrc");
+    }
+    String htmlFolder = store.getString(WikiEditorPlugin.HTML_OUTPUT_PATH);
+    if (htmlFolder == null || htmlFolder.equals("")) {
+      // set a global default
+      store.setValue(WikiEditorPlugin.HTML_OUTPUT_PATH, value + "/wpbin");
+    }
+    setProperty(project, WikiProjectPreferences.PREF_ID, FieldEditorOverlayPage.USEPROJECTSETTINGS, "true");
+    setProperty(project, WikiProjectPreferences.PREF_ID, WikiEditorPlugin.WIKI_TEXTS_BASE_PATH, value + "/wpsrc");
+    setProperty(project, WikiProjectPreferences.PREF_ID, WikiEditorPlugin.HTML_OUTPUT_PATH, value + "/wpbin");
+
+    //    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+    //    IResource resource = root.findMember(project.getLocation());
+    NullProgressMonitor _monitor = new NullProgressMonitor();
+    //    if (resource!=null && resource.exists() && (resource instanceof IContainer)) {
+    //      IContainer container = (IContainer) resource;
+    final IFolder srcFolder = project.getFolder(new Path("wpsrc"));
+    if (!srcFolder.exists()) {
+      try {
+        srcFolder.create(true, false, _monitor);
+      } catch (CoreException e) {
+      }
+    }
+    final IFolder binFolder = project.getFolder(new Path("wpbin"));
+    if (!binFolder.exists()) {
+      try {
+        binFolder.create(true, false, _monitor);
+      } catch (CoreException e) {
+      }
+    }
+    //    }
+
+  }
+
+  public static String getWikiTextsPath(IResource file) {
+    return Util.getPreferenceValue(file.getProject(), WikiEditorPlugin.WIKI_TEXTS_BASE_PATH);
+  }
+
+  public static String getProjectsWikiTextsPath(IProject project) {
+    return Util.getPreferenceValue(project, WikiEditorPlugin.WIKI_TEXTS_BASE_PATH);
+  }
+  
+  public static String getWikiFileName(String wikiLink, IFile currentFile, String key) {
+    //    String basePath = currentFile.getProject().getLocation().toString();
+    String basePath = getWikiTextsPath(currentFile);
+    return basePath + "/" + FilterUtil.normalizeWikiLink(wikiLink) + ".wp";
+  }
+
+  public static String getFileWikiName(IFile currentFile, String key) {
+    String filePath = currentFile.getLocation().toString();
+    //    String basePath = currentFile.getProject().getLocation().toString();
+    String basePath = getWikiTextsPath(currentFile);
+    StringBuffer result = new StringBuffer();
+    int lastIndex = filePath.lastIndexOf(".wp");
+    if (lastIndex < 0) {
+      lastIndex = filePath.length();
+    }
+    char ch;
+    for (int i = basePath.length() + 1; i < lastIndex; i++) {
+      ch = filePath.charAt(i);
+      switch (ch) {
+      case '/':
+        result.append(':');
+        break;
+      default:
+        result.append(ch);
+      }
+    }
+    return result.toString();
+  }
+
+  public static String getWikiTitle(IFile currentFile) {
+    String fileName = currentFile.getName();
+    String fileExt = currentFile.getFileExtension().toLowerCase();
+    if (fileExt.equals("wp")) {
+      return fileName.substring(0, fileName.length() - 3);
+    }
+    return null;
+  }
+}
\ No newline at end of file