/******************************************************************************* * Copyright (c) 2004 Ferenc Hechler - ferenc_hechler@users.sourceforge.net * * This file is part of the Fat Jar Eclipse Plug-In * * The Fat Jar Eclipse Plug-In is free software; * you can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation; * either version 2 of the License, or (at your option) any later version. * * The Fat Jar Eclipse Plug-In is distributed * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with the Fat Jar Eclipse Plug-In; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * *******************************************************************************/ package net.sf.fjep.fatjar.wizards.export; import org.eclipse.jface.dialogs.IDialogPage; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; /** * The "New" wizard page allows setting the container for * the new file as well as the file name. The page * will only accept file name without the extension OR * with the extension that matches the expected one (mpe). */ public class AutoJarPage extends WizardPage { private Button autojarEnableCheckbox; private Text autojarVisitClassesText; private Button autojarClassForNameCheckbox; BuildProperties props; public AutoJarPage(JProjectConfiguration jproject, BuildProperties props) { super("wizardPage"); System.out.println("ctor ConfigPage"); setTitle("Shrink using Auto-Jar"); setDescription("select classes to include"); this.props = props; } /** * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { try { GridData gd; Label label; Composite comp = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); comp.setLayout(layout); layout.numColumns = 2; layout.verticalSpacing = 9; //---------------------------------------------------------- label = new Label(comp, SWT.NULL); label.setVisible(false); // autojarEnableCheckbox = new Button(comp, SWT.CHECK); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; autojarEnableCheckbox.setLayoutData(gd); autojarEnableCheckbox.setText("shrink jar file using auto-jar"); autojarEnableCheckbox.setEnabled(true); autojarEnableCheckbox.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { boolean autojarEnable = autojarEnableCheckbox.getSelection(); autojarVisitClassesText.setEnabled(autojarEnable); autojarClassForNameCheckbox.setEnabled(autojarEnable); if (autojarEnable) { if (getAutojarVisitClasses().trim().equals("")) { autojarVisitClassesText.setText(getConfigMainClass()); } } dialogChanged(); } }); //---------------------------------------------------------- label = new Label(comp, SWT.NULL); label.setText("Classes-List:"); // autojarVisitClassesText = new Text(comp, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL); gd = new GridData(GridData.FILL_BOTH); autojarVisitClassesText.setLayoutData(gd); autojarVisitClassesText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { dialogChanged(); } }); //---------------------------------------------------------- label = new Label(comp, SWT.NULL); label.setVisible(false); // autojarClassForNameCheckbox = new Button(comp, SWT.CHECK); gd = new GridData(GridData.FILL_HORIZONTAL); gd.horizontalSpan = 2; autojarClassForNameCheckbox .setLayoutData(gd); autojarClassForNameCheckbox .setText("search for calls to Class.forName(...)"); autojarClassForNameCheckbox .setEnabled(true); //---------------------------------------------------------- if (props != null) { initialize(); dialogChanged(); } setControl(comp); } catch (Exception e) { e.printStackTrace(); } } private void initialize() { boolean autojarEnable = props.isAutojarEnable(); String autojarVisitClasses = props.getAutojarVisitClasses(); boolean autojarClassForName = props.isAutojarClassForName(); autojarEnableCheckbox.setSelection(autojarEnable); autojarVisitClassesText.setText(autojarVisitClasses); autojarVisitClassesText.setEnabled(autojarEnable); autojarClassForNameCheckbox.setSelection(autojarClassForName); autojarClassForNameCheckbox.setEnabled(autojarEnable); } void dialogChanged() { String errorMsg = null; String warnMsg = null; boolean autojarEnable = getAutojarEnable(); if (autojarEnable) { String autojarVisitClasses = getAutojarVisitClasses(); if (autojarVisitClasses.trim().equals("")) { errorMsg = "at least one class must be defined"; } else { String mainClass = getConfigMainClass(); if (mainClass != null) { if (autojarVisitClasses.indexOf(mainClass) == -1) { warnMsg = "main class '" + mainClass + "' is missing"; } } } } updateStatus(errorMsg, warnMsg); } private String getConfigMainClass() { FJExpWizard fjew = (FJExpWizard)this.getWizard(); String mainClass = null; if (fjew.configPage != null) { mainClass = fjew.configPage.getManifestmainclass(); } return mainClass; } private void updateStatus(String errorMessage, String warnMessage) { if (warnMessage == null) setMessage(null); else setMessage(warnMessage, IMessageProvider.WARNING); setErrorMessage(errorMessage); setPageComplete(errorMessage == null); } public boolean getAutojarEnable() { return autojarEnableCheckbox.getSelection(); } public String getAutojarVisitClasses() { return autojarVisitClassesText.getText(); } public boolean getAutojarClassForName() { return autojarClassForNameCheckbox.getSelection(); } public BuildProperties updateProperties() { boolean autojarEnable = getAutojarEnable(); String autojarVisitClasses = getAutojarVisitClasses(); boolean autojarClassForName = getAutojarClassForName(); props.setAutojarEnable(autojarEnable); props.setAutojarVisitClasses(autojarVisitClasses); props.setAutojarClassForName(autojarClassForName); return props; } public void updateBuildProperties(BuildProperties buildProps) { boolean autojarEnable = getAutojarEnable(); String autojarVisitClasses = getAutojarVisitClasses(); boolean autojarClassForName = getAutojarClassForName(); buildProps.setAutojarEnable(autojarEnable); buildProps.setAutojarVisitClasses(autojarVisitClasses); buildProps.setAutojarClassForName(autojarClassForName); } /** * @param selectedJavaProject */ public void setJProject(JProjectConfiguration jproject, BuildProperties props) { if (this.props != props) { this.props = props; initialize(); dialogChanged(); setDescription("Shrink using Auto-Jar for project " + jproject.getName()); } } }