/******************************************************************************* * Copyright (c) 2016 Spring IDE Developers * 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: * Spring IDE Developers - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.views; import org.springframework.ide.eclipse.boot.dash.dialogs.EditTemplateDialogModel; import org.springframework.ide.eclipse.boot.dash.model.BootDashModel; import org.springframework.ide.eclipse.boot.dash.model.runtargettypes.RunTargetType; /** * Model of the dialog opened by {@link CustmomizeTargetLabelAction}. Has all the functionality * of the dialog except for the widgets themselves. * * @author Kris De Volder */ public final class CustomizeTargetLabelDialogModel { //Note: there is no representation in this model of the 'cancel' button that exists in the // real dialog. When cancel is clicked basically... nothing happens and the dialog just closes, // there is no call to the model and this is fine as there is literally nothing for the model to // do. //Why not a 'real' class rather than this method that creates an anonymous class? // Because the real class has troubles initializing itself because of the call to 'getDefaultValue' // in the super constructor (it is called before the 'type' field is initialized! //This static method is almost functionally equivalent but doesn't have that problem because // the local variables exist before the class instance is constructed. public static EditTemplateDialogModel create(final BootDashModel section ) { final RunTargetType type = section.getRunTarget().getType(); return new EditTemplateDialogModel() { { template.setValue(section.getNameTemplate()); } @Override public String getTitle() { String type = section.getRunTarget().getType().getName(); return "Customize Labels for "+type+" Target(s)"; } @Override public void performOk() throws Exception { if (applyToAll.getValue()) { section.getRunTarget().getType().setNameTemplate(template.getValue()); //To *really* apply the template to *all* targets of a given type, we must make sure // that the targets do not override the value individually: for (BootDashModel model : section.getViewModel().getSectionModels().getValue()) { if (model.getRunTarget().getType().equals(type)) { model.setNameTemplate(null); model.notifyModelStateChanged(); } } } else { section.setNameTemplate(template.getValue()); section.notifyModelStateChanged(); } } @Override public String getHelpText() { return type.getTemplateHelpText(); } @Override public String getDefaultValue() { return type.getDefaultNameTemplate(); } @Override public String getApplyToAllLabel() { return "Apply to all "+type.getName()+" targets"; } @Override public boolean getApplyToAllDefault() { //'apply to all' is enabled by default, unless there is at least one applicable model which already // has an individually customized label. for (BootDashModel section : section.getViewModel().getSectionModels().getValue()) { if ( section.getRunTarget().getType().equals(type) && section.hasCustomNameTemplate() ) { return false; } } return true; } }; } }