/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.sling.ide.eclipse.ui.internal; import org.apache.sling.ide.eclipse.core.ProjectUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.dialogs.WizardDataTransferPage; import org.eclipse.wst.server.core.IServer; public class ExportWizardPage extends WizardDataTransferPage { private SlingLaunchpadCombo repositoryCombo; private IResource syncStartPoint; boolean hasValidFilter; public ExportWizardPage(IResource syncStartPoint) { super("Repository selection"); setTitle("Repository selection"); setDescription("Select a repository to export content to"); this.syncStartPoint = syncStartPoint; this.hasValidFilter = false; } @Override public void handleEvent(Event event) { determinePageCompletion(); } @Override public void createControl(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL)); composite.setSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); Composite container = new Composite(composite, SWT.NONE); container.setLayout(new GridLayout(2, false)); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); gridData.minimumWidth = 450; container.setLayoutData(gridData); new Label(container, SWT.NONE).setText("Repository: "); repositoryCombo = new SlingLaunchpadCombo(container, syncStartPoint.getProject()); repositoryCombo.getWidget().addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { determinePageCompletion(); updateWidgetEnablements(); } @Override public void widgetDefaultSelected(SelectionEvent e) { determinePageCompletion(); updateWidgetEnablements(); } }); repositoryCombo.refreshRepositoryList(new NullProgressMonitor()); createOptionsGroup(composite); setControl(composite); updateWidgetEnablements(); determinePageCompletion(); } public IServer getServer() { return repositoryCombo.getServer(); } @Override protected boolean allowNewContainerName() { return false; } @Override protected void createOptionsGroup(Composite parent) { // not really options but to placement is good enough Label filterLabel = new Label(parent, SWT.NONE); GridDataFactory.fillDefaults().applyTo(filterLabel); IFile filterFile = null; IPath path = ProjectUtil.findFilterPath(syncStartPoint.getProject()); if (path != null) { filterFile = ResourcesPlugin.getWorkspace().getRoot() .getFileForLocation(path); } if (filterFile != null && filterFile.exists()) { filterLabel.setText("Will apply export filter from /" + filterFile.getProjectRelativePath() + "."); hasValidFilter = true; } } @Override protected boolean validateDestinationGroup() { String repositoryError = repositoryCombo.getErrorMessage(); if (repositoryError != null) { setErrorMessage(repositoryError); return false; } return true; } @Override protected boolean validateSourceGroup() { if (!hasValidFilter) { setErrorMessage("No valid filter found in this project!"); return false; } return true; } }