// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.designer.core.ui.wizards;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
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;
import org.talend.commons.utils.VersionUtils;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.designer.core.i18n.Messages;
import org.talend.designer.core.ui.views.jobsettings.tabs.ProcessVersionComposite;
import org.talend.repository.ProjectManager;
import org.talend.repository.model.IProxyRepositoryFactory;
/**
* DOC xye class global comment. Detailled comment
*/
public class OpenExistVersionProcessPage extends WizardPage {
private final static String TITLE = Messages.getString("OpenExistVersionProcess.open.title"); //$NON-NLS-1$
private final IRepositoryViewObject processObject;
private ProcessVersionComposite versionListComposite;
/** Version text. */
protected Text versionText;
/** Version upgrade major button. */
private Button versionMajorBtn;
/** Version upgrade minor button. */
private Button versionMinorBtn;
private Button createNewVersionButton;
private Composite versionModifComposite;
private String originVersion = null;
private boolean createNewVersionJob = false;
private boolean alreadyEditedByUser = false;
/**
* DOC xye OpenExistVersionProcessPage constructor comment.
*
* @param pageName
*/
protected OpenExistVersionProcessPage(final boolean alreadyEditedByUser, final IRepositoryViewObject processObject) {
super("OpenExistVersionProcessPage"); //$NON-NLS-1$
setTitle(TITLE);
setMessage(Messages.getString("OpenExistVersionProcessPage.messageCreated")); //$NON-NLS-1$
this.processObject = processObject;
originVersion = getProperty().getVersion();
this.alreadyEditedByUser = alreadyEditedByUser;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
parent.setLayout(new GridLayout());
versionListComposite = new ProcessVersionComposite(parent, SWT.NULL, null, processObject);
versionListComposite.setParentWizard(this);
versionListComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
setControl(versionListComposite);
versionListComposite.refresh();
createNewVersionButton = new Button(parent, SWT.CHECK);
createNewVersionButton.setText(Messages.getString("OpenExistVersionProcessPage.textContent")); //$NON-NLS-1$
createNewVersionButton.setEnabled(!alreadyEditedByUser && !isContainedRefProject());
IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance();
if (factory.isUserReadOnlyOnCurrentProject()) {
createNewVersionButton.setEnabled(false);
}
Composite bc = new Composite(parent, SWT.NULL);
bc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridLayout layout = new GridLayout();
layout.numColumns = 2;
bc.setLayout(layout);
// Create Version
Label versionLab = new Label(bc, SWT.NONE);
versionLab.setText(Messages.getString("PropertiesWizardPage.Version")); //$NON-NLS-1$
versionModifComposite = new Composite(bc, SWT.NONE);
versionModifComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
GridLayout versionLayout = new GridLayout(3, false);
versionLayout.marginHeight = 0;
versionLayout.marginWidth = 0;
versionLayout.horizontalSpacing = 0;
versionModifComposite.setLayout(versionLayout);
versionText = new Text(versionModifComposite, SWT.BORDER);
versionText.setEnabled(false);
versionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
versionMajorBtn = new Button(versionModifComposite, SWT.PUSH);
versionMajorBtn.setText(Messages.getString("PropertiesWizardPage.Version.Major")); //$NON-NLS-1$
versionMajorBtn.setEnabled(!alreadyEditedByUser && !isContainedRefProject() && createNewVersionButton.getSelection());
versionMinorBtn = new Button(versionModifComposite, SWT.PUSH);
versionMinorBtn.setText(Messages.getString("PropertiesWizardPage.Version.Minor")); //$NON-NLS-1$
versionMinorBtn.setEnabled(!alreadyEditedByUser && !isContainedRefProject() && createNewVersionButton.getSelection());
versionText.setText(getProperty().getVersion());
addListener();
setPageComplete(false);
}
private void addListener() {
createNewVersionButton.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
boolean create = createNewVersionButton.getSelection();
versionModifComposite.setEnabled(create);
versionListComposite.setEnabled(!create);
versionMajorBtn.setEnabled(create);
versionMinorBtn.setEnabled(create);
createNewVersionJob = create;
updatePageStatus();
}
});
versionMajorBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String version = getProperty().getVersion();
version = VersionUtils.upMajor(version);
versionText.setText(version);
getProperty().setVersion(version);
updatePageStatus();
}
});
versionMinorBtn.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String version = getProperty().getVersion();
version = VersionUtils.upMinor(version);
versionText.setText(version);
getProperty().setVersion(version);
updatePageStatus();
}
});
}
public void updatePageStatus() {
if (createNewVersionButton.getSelection()) {
setPageComplete(!versionText.getText().equals(getOriginVersion()));
if (!isPageComplete()) {
setErrorMessage(Messages.getString("OpenExistVersionProcessPage.errorMessage")); //$NON-NLS-1$
} else {
setErrorMessage(null);
}
} else {
setPageComplete(getSelection() != null);
}
}
public Object getSelection() {
return versionListComposite.getSelection();
}
private Property getProperty() {
return processObject.getProperty();
}
public String getOriginVersion() {
return this.originVersion;
}
public boolean isCreateNewVersionJob() {
return this.createNewVersionJob;
}
public boolean isContainedRefProject() {
return !ProjectManager.getInstance().getProject(this.getProperty()).getTechnicalLabel()
.equals(ProjectManager.getInstance().getCurrentProject().getEmfProject().getTechnicalLabel());
}
}