001/* 002 GRANITE DATA SERVICES 003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S. 004 005 This file is part of Granite Data Services. 006 007 Granite Data Services is free software; you can redistribute it and/or modify 008 it under the terms of the GNU Library General Public License as published by 009 the Free Software Foundation; either version 2 of the License, or (at your 010 option) any later version. 011 012 Granite Data Services is distributed in the hope that it will be useful, but 013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 015 for more details. 016 017 You should have received a copy of the GNU Library General Public License 018 along with this library; if not, see <http://www.gnu.org/licenses/>. 019*/ 020 021package org.granite.builder.ui; 022 023import java.io.IOException; 024 025import org.eclipse.core.resources.IProject; 026import org.eclipse.core.runtime.CoreException; 027import org.eclipse.swt.SWT; 028import org.eclipse.swt.layout.FillLayout; 029import org.eclipse.swt.widgets.Composite; 030import org.eclipse.swt.widgets.Control; 031import org.eclipse.swt.widgets.TabFolder; 032import org.eclipse.swt.widgets.TabItem; 033import org.eclipse.swt.widgets.Text; 034import org.eclipse.ui.dialogs.PropertyPage; 035import org.granite.builder.GraniteBuilderContext; 036import org.granite.builder.GraniteRebuildJob; 037import org.granite.builder.properties.Gas3Transformer; 038import org.granite.builder.properties.GraniteProperties; 039import org.granite.builder.properties.GranitePropertiesLoader; 040import org.granite.builder.util.SWTUtil; 041import org.granite.builder.util.StringUtil; 042 043/** 044 * @author Franck WOLFF 045 */ 046public class GranitePropertyPage extends PropertyPage { 047 048 private GraniteBuilderContext context = null; 049 050 private SourcesPanel sourcesPanel = null; 051 private ProjectsPanel projectsPanel = null; 052 private ClasspathsPanel classpathsPanel = null; 053 private TemplatesPanel templatesPanel = null; 054 private OptionsPanel optionsPanel = null; 055 056 public GranitePropertyPage() { 057 super(); 058 } 059 060 @Override 061 protected Control createContents(Composite parent) { 062 Composite composite = new Composite(parent, SWT.NONE); 063 composite.setLayout(new FillLayout()); 064 065 try { 066 this.context = new GraniteBuilderContext((IProject)getElement()); 067 068 TabFolder tabFolder = new TabFolder(composite, SWT.FILL); 069 070 addTabItem1(tabFolder); 071 addTabItem2(tabFolder); 072 addTabItem3(tabFolder); 073 addTabItem4(tabFolder); 074 addTabItem5(tabFolder); 075 076 noDefaultAndApplyButton(); 077 078 return composite; 079 } catch (Exception e) { 080 Text text = new Text(composite, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY); 081 text.setText(StringUtil.tokenize("Granite properties load failed: " + e.toString(), 80, Text.DELIMITER)); 082 return composite; 083 } 084 } 085 086 private void addTabItem1(TabFolder tabFolder) throws CoreException { 087 TabItem item = new TabItem(tabFolder, SWT.NONE); 088 item.setText("Java Sources"); 089 item.setImage(SWTUtil.getImage(item.getDisplay(), SWTUtil.IMG_PKG_FOLDER)); 090 sourcesPanel = new SourcesPanel(tabFolder, context); 091 item.setControl(sourcesPanel); 092 } 093 094 private void addTabItem2(TabFolder tabFolder) throws CoreException { 095 TabItem item = new TabItem(tabFolder, SWT.NONE); 096 item.setText("Projects"); 097 item.setImage(SWTUtil.getImage(item.getDisplay(), SWTUtil.IMG_PROJECTS)); 098 projectsPanel = new ProjectsPanel(tabFolder, context); 099 item.setControl(projectsPanel); 100 } 101 102 private void addTabItem3(TabFolder tabFolder) throws CoreException { 103 TabItem item = new TabItem(tabFolder, SWT.NONE); 104 item.setText("Libraries"); 105 item.setImage(SWTUtil.getImage(item.getDisplay(), SWTUtil.IMG_LIBRARY)); 106 classpathsPanel = new ClasspathsPanel(tabFolder, context); 107 item.setControl(classpathsPanel); 108 } 109 110 private void addTabItem4(TabFolder tabFolder) throws CoreException { 111 TabItem item = new TabItem(tabFolder, SWT.NONE); 112 item.setText("Templates"); 113 item.setImage(SWTUtil.getImage(item.getDisplay(), SWTUtil.IMG_TEMPLATE)); 114 templatesPanel = new TemplatesPanel(tabFolder, context); 115 item.setControl(templatesPanel); 116 } 117 118 private void addTabItem5(TabFolder tabFolder) throws CoreException { 119 TabItem item = new TabItem(tabFolder, SWT.NONE); 120 item.setText("Options"); 121 item.setImage(SWTUtil.getImage(item.getDisplay(), SWTUtil.IMG_SETTINGS)); 122 optionsPanel = new OptionsPanel(tabFolder, context); 123 item.setControl(optionsPanel); 124 } 125 126 @Override 127 public boolean performOk() { 128 GraniteProperties properties = GraniteProperties.getDefaultProperties(); 129 130 properties.getGas3().getSources().addAll(sourcesPanel.getSources()); 131 132 properties.getGas3().getProjects().addAll(projectsPanel.getProjects()); 133 134 properties.getGas3().getClasspaths().addAll(classpathsPanel.getClasspaths()); 135 136 properties.getGas3().getTemplates().clear(); 137 properties.getGas3().getTemplates().addAll(templatesPanel.getTemplates()); 138 139 properties.getGas3().setUid(optionsPanel.getUid()); 140 properties.getGas3().setAs3TypeFactory(optionsPanel.getAs3TypeFactory()); 141 properties.getGas3().setEntityFactory(optionsPanel.getEntityFactory()); 142 properties.getGas3().setRemoteDestinationFactory(optionsPanel.getRemoteDestinationFactory()); 143 properties.getGas3().getTransformers().clear(); 144 properties.getGas3().getTransformers().add(new Gas3Transformer(optionsPanel.getTransformer())); 145 properties.getGas3().getTranslators().clear(); 146 properties.getGas3().getTranslators().addAll(optionsPanel.getTranslators()); 147 properties.getGas3().setDebugEnabled(optionsPanel.isDebugEnabled()); 148 properties.getGas3().setFlexConfig(optionsPanel.isFlexConfig()); 149 properties.getGas3().setExternalizeLong(optionsPanel.isExternalizeLong()); 150 properties.getGas3().setExternalizeBigInteger(optionsPanel.isExternalizeBigInteger()); 151 properties.getGas3().setExternalizeBigDecimal(optionsPanel.isExternalizeBigDecimal()); 152 153 try { 154 GranitePropertiesLoader.save((IProject)getElement(), properties); 155 } catch (IOException e) { 156 setErrorMessage("Could not save Granite properties: " + e.toString()); 157 return false; 158 } 159 160 GraniteRebuildJob rebuild = new GraniteRebuildJob((IProject)getElement(), true); 161 rebuild.schedule(); 162 163 return true; 164 } 165}