/******************************************************************************* * Copyright (c) 2013 Stephane Begaudeau (Obeo). * 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: * Stephane Begaudeau (Obeo) - initial API and implementation *******************************************************************************/ package org.obeonetwork.angularjs.eclipse.tools.ide.ui.internal.wizards.service; import java.util.List; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.obeonetwork.angularjs.eclipse.tools.ide.ui.internal.AngularJSIDEUIMessages; import org.obeonetwork.angularjs.eclipse.tools.ide.ui.internal.AngularJSIDEUIPlugin; import org.obeonetwork.angularjs.eclipse.tools.ide.ui.internal.wizards.AbstractAngularJSDescriptionWizardPage; import org.obeonetwork.angularjs.eclipse.tools.ide.ui.internal.wizards.AngularJSDialogField; import org.obeonetwork.angularjs.eclipse.tools.ide.ui.internal.wizards.AngularJSStringDialogField; /** * @author <a href="mailto:stephane.begaudeau@obeo.fr">Stephane Begaudeau</a> */ public class AngularJSServiceDescriptionWizardPage extends AbstractAngularJSDescriptionWizardPage { private AngularJSStringDialogField serviceNameDialogField; /** * The constructor. * * @param selection * The current selection */ public AngularJSServiceDescriptionWizardPage(IStructuredSelection selection) { super(AngularJSIDEUIMessages.getString("AngularJSServiceDescriptionWizardPage.Name")); //$NON-NLS-1$ this.setTitle(AngularJSIDEUIMessages.getString("AngularJSServiceDescriptionWizardPage.Title")); //$NON-NLS-1$ this.setDescription(AngularJSIDEUIMessages .getString("AngularJSServiceDescriptionWizardPage.Description")); //$NON-NLS-1$ this.init(selection); } /** * {@inheritDoc} * * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ @Override public void createControl(Composite parent) { this.initializeDialogUnits(parent); Composite composite = new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); int nColumns = 4; GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = nColumns; composite.setLayout(gridLayout); this.createContainerControls(composite, nColumns); this.createModuleNameControls(composite, nColumns); this.createModuleDependenciesControls(composite, nColumns); this.createSeparatorControls(composite, nColumns); this.createServiceNameControls(composite, nColumns); this.createServiceDependenciesGroupControls(composite, nColumns); this.createCommentsLicenseAndCopyrightsControls(composite, nColumns); this.setControl(composite); } protected void createServiceNameControls(Composite parent, int nColumns) { this.serviceNameDialogField = new AngularJSStringDialogField(); this.serviceNameDialogField.setLabelText("Service Name:"); this.serviceNameDialogField.doFillIntoGrid(parent, nColumns - 1); AngularJSDialogField.createEmptySpace(parent); } public String getServiceName() { return this.serviceNameDialogField.getText(); } public String getServiceFileContent() { final String ls = System.lineSeparator(); StringBuilder stringBuilder = new StringBuilder(); if (this.shouldGenerateCommentLicenseAndCopyrightHeader()) { stringBuilder.append("/***************************************************" + ls); stringBuilder.append(" * <copyright and license>" + ls); stringBuilder.append(" ***************************************************/" + ls); stringBuilder.append("" + ls); stringBuilder.append("'use strict';" + ls); stringBuilder.append("" + ls); stringBuilder.append("/*jslint indent: 2*/" + ls); stringBuilder.append("/*global angular*/" + ls); stringBuilder.append("" + ls); stringBuilder.append("/**" + ls); stringBuilder.append(" * The documentation of the service." + ls); stringBuilder.append(" */" + ls); } stringBuilder.append("angular.module('" + this.getModuleName() + '.' + this.serviceNameDialogField.getText() + "', [" + this.getModuleDependencies() + "]).factory('" + this.serviceNameDialogField.getText() + "', [" + this.serviceDependenciesName() + " function(" + this.serviceDependenciesParameter() + ") {" + ls); stringBuilder.append(" var " + this.serviceNameDialogField.getText() + " = {};" + ls); stringBuilder.append(" return " + this.serviceNameDialogField.getText() + ";" + ls); stringBuilder.append("}]);" + ls); stringBuilder.append("" + ls); return stringBuilder.toString(); } /** * @return */ private String serviceDependenciesName() { StringBuilder stringBuilder = new StringBuilder(); List<String> serviceDependencies = this.getDependencies(); for (String serviceDependency : serviceDependencies) { stringBuilder.append("'" + serviceDependency + "', "); } return stringBuilder.toString().trim(); } /** * @return */ private String serviceDependenciesParameter() { StringBuilder stringBuilder = new StringBuilder(); List<String> serviceDependencies = this.getDependencies(); for (String serviceDependency : serviceDependencies) { if (serviceDependencies.indexOf(serviceDependency) == serviceDependencies.size() - 1) { stringBuilder.append(serviceDependency); } else { stringBuilder.append(serviceDependency + ", "); } } return stringBuilder.toString().trim(); } /** * {@inheritDoc} * * @see org.eclipse.jface.wizard.WizardPage#getImage() */ @Override public Image getImage() { return AngularJSIDEUIPlugin.getDefault().getImage("icons/wizards/AngularJS-Wizard-Service-Title.png"); //$NON-NLS-1$ } }