| /* |
| * Copyright (c) 2015 Eike Stepper (Berlin, Germany) and others. |
| * 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: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.emf.cdo.explorer.ui.checkouts.wizards; |
| |
| import org.eclipse.emf.cdo.common.branch.CDOBranch; |
| import org.eclipse.emf.cdo.common.branch.CDOBranchManager; |
| import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; |
| import org.eclipse.emf.cdo.common.util.CDOCommonUtil; |
| import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout; |
| import org.eclipse.emf.cdo.explorer.repositories.CDORepository; |
| import org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutImpl; |
| import org.eclipse.emf.cdo.session.CDOSession; |
| import org.eclipse.emf.cdo.ui.widgets.ComposeBranchPointComposite; |
| |
| import org.eclipse.net4j.util.container.IContainer; |
| import org.eclipse.net4j.util.ui.views.ContainerItemProvider; |
| |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Display; |
| |
| import java.util.Properties; |
| |
| /** |
| * @author Eike Stepper |
| */ |
| public class CheckoutBranchPointPage extends CheckoutWizardPage |
| { |
| private static final IContainer<Object> CONNECTING_INPUT = ContainerItemProvider.createSlowInput("Connecting..."); |
| |
| private int branchID = CDOBranch.MAIN_BRANCH_ID; |
| |
| private long timeStamp = CDOBranchPoint.UNSPECIFIED_DATE; |
| |
| private ComposeBranchPointComposite branchPointComposite; |
| |
| private String timeStampError; |
| |
| public CheckoutBranchPointPage() |
| { |
| super("Branch Point", "Select the branch point of the new checkout."); |
| } |
| |
| public final int getBranchID() |
| { |
| return branchID; |
| } |
| |
| public final long getTimeStamp() |
| { |
| return timeStamp; |
| } |
| |
| public final CDOBranchPoint getBranchPoint() |
| { |
| CheckoutRepositoryPage repositoryPage = getWizard().getRepositoryPage(); |
| CDOSession session = repositoryPage.getSession(); |
| |
| CDOBranchManager branchManager = session.getBranchManager(); |
| CDOBranch branch = branchManager.getBranch(branchID); |
| |
| return branch.getPoint(timeStamp); |
| } |
| |
| public void setBranchPoint(int branchID, long timeStamp) |
| { |
| if (this.branchID != branchID || this.timeStamp != timeStamp) |
| { |
| log("Setting branch point to " + branchID + "/" + CDOCommonUtil.formatTimeStamp(timeStamp)); |
| this.branchID = branchID; |
| this.timeStamp = timeStamp; |
| |
| if (branchPointComposite != null) |
| { |
| CDOBranchPoint branchPoint = getBranchPoint(); |
| CDOBranch branch = branchPoint.getBranch(); |
| |
| TreeViewer branchViewer = branchPointComposite.getBranchViewer(); |
| branchViewer.setSelection(new StructuredSelection(branch)); |
| branchViewer.setExpandedState(branch, true); |
| } |
| |
| branchPointChanged(branchID, timeStamp); |
| } |
| } |
| |
| @Override |
| protected void createUI(Composite parent) |
| { |
| CDOBranchPoint branchPoint = getBranchPoint(); |
| |
| branchPointComposite = new ComposeBranchPointComposite(parent, true, branchPoint) |
| { |
| @Override |
| protected void timeStampError(String message) |
| { |
| timeStampError = message; |
| validate(); |
| } |
| |
| @Override |
| protected void branchPointChanged(CDOBranchPoint branchPoint) |
| { |
| int id = branchPoint.getBranch().getID(); |
| long timeStamp = branchPoint.getTimeStamp(); |
| CheckoutBranchPointPage.this.setBranchPoint(id, timeStamp); |
| validate(); |
| } |
| |
| @Override |
| protected void doubleClicked() |
| { |
| showNextPage(); |
| } |
| }; |
| |
| branchPointComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); |
| branchPointComposite.getBranchViewer().setInput(CONNECTING_INPUT); |
| |
| } |
| |
| @Override |
| protected void repositoryChanged(CDORepository repository) |
| { |
| if (branchPointComposite != null) |
| { |
| TreeViewer branchViewer = branchPointComposite.getBranchViewer(); |
| branchViewer.setSelection(StructuredSelection.EMPTY); |
| branchViewer.setInput(CONNECTING_INPUT); |
| } |
| |
| super.repositoryChanged(repository); |
| } |
| |
| @Override |
| protected void pageActivated() |
| { |
| final CheckoutWizard wizard = getWizard(); |
| String type = wizard.getTypePage().getType(); |
| |
| if (CDOCheckout.TYPE_ONLINE_TRANSACTIONAL.equals(type)) |
| { |
| branchPointComposite.setAllowTimeStamp(false); |
| } |
| else |
| { |
| branchPointComposite.setAllowTimeStamp(true); |
| branchPointComposite.getSelectTimeComposite().setTimeStamp(timeStamp); |
| } |
| |
| final Display display = branchPointComposite.getDisplay(); |
| display.asyncExec(new Runnable() |
| { |
| public void run() |
| { |
| final CDOSession session = wizard.getRepositoryPage().getSession(); |
| final CDOBranchPoint branchPoint = wizard.getBranchPointPage().getBranchPoint(); |
| final TreeViewer branchViewer = branchPointComposite.getBranchViewer(); |
| |
| branchViewer.setInput(session.getBranchManager()); |
| display.asyncExec(new Runnable() |
| { |
| public void run() |
| { |
| CDOBranch branch = branchPoint.getBranch(); |
| branchViewer.setSelection(new StructuredSelection(branch)); |
| branchViewer.expandToLevel(branch, 1); |
| } |
| }); |
| } |
| }); |
| } |
| |
| @Override |
| protected boolean doValidate() throws ValidationProblem |
| { |
| TreeViewer branchViewer = branchPointComposite.getBranchViewer(); |
| if (branchViewer.getInput() == null) |
| { |
| return false; |
| } |
| |
| ISelection selection = branchViewer.getSelection(); |
| if (selection == null || selection.isEmpty()) |
| { |
| return false; |
| } |
| |
| if (timeStampError != null) |
| { |
| throw new ValidationProblem(timeStampError); |
| } |
| |
| return true; |
| } |
| |
| @Override |
| protected void fillProperties(Properties properties) |
| { |
| properties.setProperty(CDOCheckoutImpl.PROP_BRANCH_ID, Integer.toString(branchID)); |
| properties.setProperty(CDOCheckoutImpl.PROP_TIME_STAMP, Long.toString(timeStamp)); |
| } |
| } |