]> git.uio.no Git - ifi-stolz-refaktor.git/blobdiff - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / viewsupport / ProjectTemplateStore.java
diff --git a/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java b/case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/viewsupport/ProjectTemplateStore.java
new file mode 100644 (file)
index 0000000..8131acc
--- /dev/null
@@ -0,0 +1,210 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2011 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 API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.viewsupport;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.core.runtime.Assert;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ProjectScope;
+
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.persistence.TemplatePersistenceData;
+import org.eclipse.jface.text.templates.persistence.TemplateReaderWriter;
+import org.eclipse.jface.text.templates.persistence.TemplateStore;
+
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+
+import org.eclipse.jdt.ui.JavaUI;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.preferences.CodeTemplateBlock;
+
+/**
+ * @since 3.1
+ */
+public final class ProjectTemplateStore {
+
+       private static final String KEY= "org.eclipse.jdt.ui.text.custom_code_templates"; //$NON-NLS-1$
+
+       private final TemplateStore fInstanceStore;
+       private final TemplateStore fProjectStore;
+
+       public ProjectTemplateStore(IProject project) {
+               fInstanceStore= JavaPlugin.getDefault().getCodeTemplateStore();
+               if (project == null) {
+                       fProjectStore= null;
+               } else {
+                       final ScopedPreferenceStore projectSettings= new ScopedPreferenceStore(new ProjectScope(project), JavaUI.ID_PLUGIN);
+                       fProjectStore= new TemplateStore(projectSettings, KEY) {
+                               /*
+                                * Make sure we keep the id of added code templates - add removes
+                                * it in the usual add() method
+                                */
+                               @Override
+                               public void add(TemplatePersistenceData data) {
+                                       internalAdd(data);
+                               }
+
+                               @Override
+                               public void save() throws IOException {
+
+                                       TemplatePersistenceData[] templateData= ProjectTemplateStore.this.getTemplateData();
+                                       for (int i= 0; i < templateData.length; i++) {
+                                               if (isProjectSpecific(templateData[i].getId())) {
+                                                       StringWriter output= new StringWriter();
+                                                       TemplateReaderWriter writer= new TemplateReaderWriter();
+                                                       writer.save(getTemplateData(false), output);
+
+                                                       projectSettings.setValue(KEY, output.toString());
+                                                       projectSettings.save();
+
+                                                       return;
+                                               }
+                                       }
+
+                                       projectSettings.setToDefault(KEY);
+                                       projectSettings.save();
+                               }
+                       };
+               }
+       }
+
+       public static boolean hasProjectSpecificTempates(IProject project) {
+               String pref= new ProjectScope(project).getNode(JavaUI.ID_PLUGIN).get(KEY, null);
+               if (pref != null && pref.trim().length() > 0) {
+                       Reader input= new StringReader(pref);
+                       TemplateReaderWriter reader= new TemplateReaderWriter();
+                       TemplatePersistenceData[] datas;
+                       try {
+                               datas= reader.read(input);
+                               return datas.length > 0;
+                       } catch (IOException e) {
+                               // ignore
+                       }
+               }
+               return false;
+       }
+
+
+       public TemplatePersistenceData[] getTemplateData() {
+               if (fProjectStore != null) {
+                       return fProjectStore.getTemplateData(true);
+               } else {
+                       return fInstanceStore.getTemplateData(true);
+               }
+       }
+
+       public Template findTemplateById(String id) {
+               Template template= null;
+               if (fProjectStore != null)
+                       template= fProjectStore.findTemplateById(id);
+               if (template == null)
+                       template= fInstanceStore.findTemplateById(id);
+
+               return template;
+       }
+
+       public void load() throws IOException {
+               if (fProjectStore != null) {
+                       fProjectStore.load();
+
+                       Set<String> datas= new HashSet<String>();
+                       TemplatePersistenceData[] data= fProjectStore.getTemplateData(false);
+                       for (int i= 0; i < data.length; i++) {
+                               datas.add(data[i].getId());
+                       }
+
+                       data= fInstanceStore.getTemplateData(false);
+                       for (int i= 0; i < data.length; i++) {
+                               TemplatePersistenceData orig= data[i];
+                               if (!datas.contains(orig.getId())) {
+                                       TemplatePersistenceData copy= new TemplatePersistenceData(new Template(orig.getTemplate()), orig.isEnabled(), orig.getId());
+                                       fProjectStore.add(copy);
+                                       copy.setDeleted(true);
+                               }
+                       }
+               }
+       }
+
+       public boolean isProjectSpecific(String id) {
+               if (id == null) {
+                       return false;
+               }
+
+               if (fProjectStore == null)
+                       return false;
+
+               return fProjectStore.findTemplateById(id) != null;
+       }
+
+
+       public void setProjectSpecific(String id, boolean projectSpecific) {
+               Assert.isNotNull(fProjectStore);
+
+               TemplatePersistenceData data= fProjectStore.getTemplateData(id);
+               if (data == null) {
+                       return; // does not exist
+               } else {
+                       data.setDeleted(!projectSpecific);
+               }
+       }
+
+       public void restoreDefaults() {
+               if (fProjectStore == null) {
+                       fInstanceStore.restoreDefaults(false);
+               } else {
+                       try {
+                               load();
+                       } catch (IOException e) {
+                               JavaPlugin.log(e);
+                       }
+               }
+       }
+
+       public void save() throws IOException {
+               if (fProjectStore == null) {
+                       fInstanceStore.save();
+               } else {
+                       fProjectStore.save();
+               }
+       }
+
+       public void revertChanges() throws IOException {
+               if (fProjectStore != null) {
+                       // nothing to do
+               } else {
+                       fInstanceStore.load();
+               }
+       }
+
+       public boolean generated_3221025601432332826(CodeTemplateBlock codetemplateblock, boolean enabled) {
+               if (codetemplateblock.fProject != null) {
+                       TemplatePersistenceData[] templateData= getTemplateData();
+                       for (int i= 0; i < templateData.length; i++) {
+                               setProjectSpecific(templateData[i].getId(), enabled);
+                       }
+               }
+               try {
+                       save();
+               } catch (IOException e) {
+                       JavaPlugin.log(e);
+                       codetemplateblock.openWriteErrorDialog();
+               }
+               return true;
+       }
+}