/* * OneCMDB, an open source configuration management project. * Copyright 2007, Lokomo Systems AB, and individual contributors * as indicated by the @authors tag. See the copyright.txt in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.onecmdb.ui.gwt.toolkit.client.view.screen.ci; import org.gwtiger.client.widget.panel.ButtonCallback; import org.gwtiger.client.widget.panel.ButtonPanel; import org.onecmdb.ui.gwt.toolkit.client.control.OneCMDBConnector; import org.onecmdb.ui.gwt.toolkit.client.control.OneCMDBSession; import org.onecmdb.ui.gwt.toolkit.client.control.input.CIAttributeValueInputControl; import org.onecmdb.ui.gwt.toolkit.client.control.input.IAttributeFilter; import org.onecmdb.ui.gwt.toolkit.client.control.input.IAttributeLoader; import org.onecmdb.ui.gwt.toolkit.client.control.listener.LoadListener; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.GWT_CiBean; import org.onecmdb.ui.gwt.toolkit.client.model.onecmdb.GWT_RfcResult; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIIconDisplayNameWidget; import org.onecmdb.ui.gwt.toolkit.client.view.ci.CIIconWidget; import org.onecmdb.ui.gwt.toolkit.client.view.input.AttributeRender; import org.onecmdb.ui.gwt.toolkit.client.view.input.CIValueInputPanel; import org.onecmdb.ui.gwt.toolkit.client.view.screen.OneCMDBBaseScreen; import com.google.gwt.user.client.History; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.CellPanel; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; public class NewCIScreen extends OneCMDBBaseScreen implements ButtonCallback,LoadListener { protected CIValueInputPanel attributePanel; protected AttributeRender render; protected CIAttributeValueInputControl control; protected String templateAlias; protected CellPanel input = null; public NewCIScreen() { this.setTitleText("New Instance of ..."); input = getMainPanel(); dockPanel.add(input, CENTER); dockPanel.setCellWidth(input, "100%"); initWidget(this.dockPanel); showError(false); } protected CellPanel getMainPanel() { return(new VerticalPanel()); } public void save() { setLoadingText("Saving...."); showLoading(true); control.commit(new AsyncCallback() { public void onFailure(Throwable caught) { showLoading(false); onCommitFailure(caught); } public void onSuccess(Object result) { showLoading(false); onCommitSuccess(result); } }); } protected void onCommitSuccess(Object result) { History.back(); } protected void onCommitFailure(Throwable caught) { setErrorText("ERROR: Create new Instance exception:" + caught.getMessage()); showError(true); } /* protected GWT_CiBean newCI(GWT_CiBean template, List values) { GWT_CiBean newCI = new GWT_CiBean(); newCI.setDerivedFrom(template.getAlias()); newCI.setAlias(template.getAlias() + System.currentTimeMillis()); newCI.setAttributeValues(values); newCI.setTemplate(false); return(newCI); } * */ public boolean validate() { if (this.attributePanel == null) { return(true); } return(this.attributePanel.validate()); } public void clear() { if (this.attributePanel != null) { this.attributePanel.clear(); } showError(false); } /** * Load with an object id. */ public void load(String objectType, Long objectId) { setErrorText(""); input.clear(); update(objectType); } protected void update(String objectType) { this.templateAlias = objectType; input.setStyleName("one-new-screen-panel"); attributePanel = new CIValueInputPanel(); Widget buttonPanel = getButtonPanel(); buttonPanel.setStyleName("one-button-panel"); input.add(attributePanel); input.add(buttonPanel); input.setCellHorizontalAlignment(buttonPanel, HorizontalPanel.ALIGN_CENTER); input.setCellVerticalAlignment(buttonPanel, VerticalPanel.ALIGN_TOP); System.out.println("NewCIScreen.Load(" + objectType + ")"); // Create a new Render every time, since it holds mapping between widget and values! render = new AttributeRender(); render.setIsNew(isNew()); attributePanel.setAttributeRender(render); /* if (this.templateAlias == objectType) { this.attributePanel.clear(); } else { */ control = getControl(); control.setAttributeFilter(getAttributeFilter()); this.attributePanel.setAttributeValueControl(control); this.attributePanel.addLoadListener(this); this.attributePanel.load(); //} } protected CIAttributeValueInputControl getControl() { //if (this.control == null) { this.control = new CIAttributeValueInputControl(templateAlias, isNew()); //} return(this.control); } protected boolean isNew() { return(true); } protected Widget getButtonPanel() { // Add Button Panel.. ButtonPanel b = new ButtonPanel(); b.addSaveButton(); b.addCancelButton(); b.setCallback(this); return(b); } public IAttributeFilter getAttributeFilter() { return(null); } protected IAttributeLoader loadTickIssuer() { return(new IAttributeLoader() { public void load(final AsyncCallback callback) { // Load people for the account. GWT_CiBean account = getBaseEntryScreen().getAccount(); OneCMDBConnector.getInstance().evalRelation(OneCMDBSession.getAuthToken(), account, "<$template{Person}", null, new AsyncCallback() { public void onFailure(Throwable caught) { callback.onFailure(caught); } public void onSuccess(Object result) { if (result instanceof GWT_CiBean[]) { GWT_CiBean peoples[] = (GWT_CiBean[])result; if (peoples.length > 0) { callback.onSuccess(peoples[0]); } } } }); } }); } public void onLoadComplete(Object sender) { // Update header.... setTitleText("New Instance of"); setTitleWidget(new CIIconDisplayNameWidget(control.getBase())); showLoading(false); } public void onLoadFailure(Object sender, Throwable caught) { } public void onLoadStart(Object sender) { } public void close() { History.back(); } }