Java tutorial
/* * Copyright (C) 2008-2010 Dario Scoppelletti, <http://www.scoppelletti.it/>. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package it.scoppelletti.sdk.ide.ui; import java.util.*; import java.util.List; import java.util.regex.*; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.eclipse.ui.dialogs.*; import it.scoppelletti.sdk.ide.*; /** * Pagina del wizard per la creazione di un nuovo progetto. */ final class NewProjectPage extends WizardNewProjectCreationPage implements INewProjectParameters { private static final String DEF_VENDOR = "it.scoppelletti.sdk.ide.ui.NewProjectPage.vendor"; private static final String PROP_USERNAME = "user.name"; private static final char PROJECTNAME_SEP = '.'; private static final char BASENAME_SEP = '-'; private static final String JAR_EXT = ".jar"; private static final String WAR_EXT = ".war"; private static final Pattern mySymbolicNameFormat = Pattern .compile("[\\p{Lower}_][\\p{Lower}\\d_]*(\\.[\\p{Lower}_][\\p{Lower}\\d_]*)*"); private static final Pattern myVersionFormat = Pattern.compile("([1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)"); private Text myVersionText = null; private Text mySpecificationTitleText = null; private Text myVendorText = null; private Combo myTargetCombo = null; private List<String> myTargetList = null; private Text myMainClassText = null; /** * Costruttore. */ NewProjectPage() { super("project"); setTitle("Programmer Power Project"); setDescription("Create a new Programmer Power project."); } /** * Restituisce il nome del progetto. * * @return Valore. */ @Override public String getProjectName() { String name; name = super.getProjectName(); if (name == null) { return ""; } return name.toLowerCase(); } /** * Restituisce la versione. * * @return Valore. */ public String getVersion() { if (myVersionText == null) { return ""; } return myVersionText.getText().trim(); } /** * Restituisce il titolo. * * @return Valore. */ public String getSpecificationTitle() { if (mySpecificationTitleText == null) { return ""; } return mySpecificationTitleText.getText().trim(); } /** * Restituisce il produttore. * * @return Valore. */ public String getVendor() { if (myVendorText == null) { return ""; } return myVendorText.getText().trim(); } public String getBaseName() { String baseName, projectName; projectName = getProjectName(); baseName = projectName.replace(NewProjectPage.PROJECTNAME_SEP, NewProjectPage.BASENAME_SEP); return baseName; } public String getArchiveExtension() { String target = getTarget(); if (INewProjectParameters.TARGET_WAR.equals(target)) { return NewProjectPage.WAR_EXT; } return NewProjectPage.JAR_EXT; } public String getTarget() { int selectedIdx; String target; if (myTargetCombo == null || myTargetList == null) { return null; } target = null; selectedIdx = myTargetCombo.getSelectionIndex(); if (selectedIdx >= 0 && selectedIdx < myTargetList.size()) { target = myTargetList.get(selectedIdx); } return target; } public String getMainClass() { if (myMainClassText == null) { return ""; } return myMainClassText.getText().trim(); } /** * Registra le impostazioni. * * @param settings Impostazioni. */ void saveSettings(IDialogSettings settings) { settings.put(NewProjectPage.DEF_VENDOR, getVendor()); } /** * Crea i controlli. * * @param parent Controllo parent. */ @Override public void createControl(Composite parent) { Composite control; super.createControl(parent); control = (Composite) getControl(); control.setLayout(new GridLayout()); create(control); Dialog.applyDialogFont(control); setControl(control); } /** * Crea i controlli. * * @param container Contenitore. */ private void create(Composite container) { String value; Composite panel; IDialogSettings settings = getDialogSettings(); panel = new Composite(container, SWT.NONE); panel.setLayout(new GridLayout(2, false)); panel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); createLabel(panel, "Version:"); myVersionText = createText(panel); myVersionText.setText("1.0.0"); createLabel(panel, "Title:"); mySpecificationTitleText = createText(panel); createLabel(panel, "Vendor:"); myVendorText = createText(panel); value = null; if (settings != null) { value = settings.get(NewProjectPage.DEF_VENDOR); } if (value == null || value.isEmpty()) { try { value = System.getProperty(NewProjectPage.PROP_USERNAME); } catch (Exception ex) { StatusUtils.logStatus(ex); } } myVendorText.setText(value); createLabel(panel, "Target:"); myTargetCombo = createCombo(panel); myTargetList = loadTargetCombo(myTargetCombo); createLabel(panel, "Main-Class:"); myMainClassText = createText(panel); myVersionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(validatePage()); } }); myTargetCombo.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { setPageComplete(validatePage()); } public void widgetDefaultSelected(SelectionEvent arg0) { setPageComplete(validatePage()); } }); } /** * Verifica la validità delle impostazioni sui controlli della * pagina. * * @return Esito della verifica. */ @Override protected boolean validatePage() { String msg, projectName, target, version; Matcher matcher; if (!super.validatePage()) { return false; } projectName = getProjectName(); matcher = mySymbolicNameFormat.matcher(projectName); if (!matcher.matches()) { msg = String.format("Malformed project name \"%1$s\"", projectName); setErrorMessage(msg); return false; } version = getVersion(); if (version.isEmpty()) { setErrorMessage("Version must be specified"); return false; } matcher = myVersionFormat.matcher(version); if (!matcher.matches()) { msg = String.format("Malformed version \"%1$s\"", version); setErrorMessage(msg); return false; } target = getTarget(); if (target == null || target.isEmpty()) { setErrorMessage("Any target must be selected."); return false; } if (INewProjectParameters.TARGET_WAR.equals(target)) { myMainClassText.setText(""); myMainClassText.setEnabled(false); } else { myMainClassText.setEnabled(true); } setErrorMessage(null); setMessage(null); return true; } /** * Crea un’etichetta. * * @param container Contenitore. * @param text Testo. */ private void createLabel(Composite container, String text) { Label label; GridData gridData; label = new Label(container, SWT.NONE); label.setText(text); gridData = new GridData(); label.setLayoutData(gridData); } /** * Crea una casella di testo. * * @param container Contenitore. * @return Controllo. */ private Text createText(Composite container) { Text text; GridData gridData; text = new Text(container, SWT.BORDER | SWT.SINGLE); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.widthHint = 300; text.setLayoutData(gridData); return text; } /** * Crea una casella combinata. * * @param container Contenitore. * @return Controllo. */ private Combo createCombo(Composite container) { Combo combo; GridData gridData; combo = new Combo(container, SWT.READ_ONLY); gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.widthHint = 300; combo.setLayoutData(gridData); return combo; } /** * Costruisce la lista dei target selezionabili. * * @param combo Casella combinata. * @return Lista delle chiavi dei target corrispondenti agli elementi * inseriti nella casella combinata. */ private List<String> loadTargetCombo(Combo combo) { List<String> targetList = new ArrayList<String>(); targetList.add(INewProjectParameters.TARGET_JAR); combo.add("Java module"); targetList.add(INewProjectParameters.TARGET_WAR); combo.add("Dynamic web application"); combo.select(0); return targetList; } }