Java tutorial
/* * This file is part of the ZoRa project: http://www.photozora.org. * * ZoRa is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * ZoRa 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with ZoRa; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * (c) 2009 Berthold Daum */ package com.bdaum.zoom.net.communities.ui; import java.io.File; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.scohen.juploadr.uploadapi.AuthException; import org.scohen.juploadr.uploadapi.CommunicationException; import org.scohen.juploadr.uploadapi.Session; import com.bdaum.zoom.cat.model.asset.Asset; import com.bdaum.zoom.core.Assetbox; import com.bdaum.zoom.core.Constants; import com.bdaum.zoom.core.Core; import com.bdaum.zoom.core.QueryField; import com.bdaum.zoom.core.internal.CoreActivator; import com.bdaum.zoom.core.internal.IMediaSupport; import com.bdaum.zoom.image.ImageConstants; import com.bdaum.zoom.net.communities.CommunityAccount; import com.bdaum.zoom.net.communities.CommunityApi; import com.bdaum.zoom.net.communities.HelpContextIds; import com.bdaum.zoom.net.communities.jobs.ExportToCommunityJob; import com.bdaum.zoom.ui.internal.UiUtilities; import com.bdaum.zoom.ui.internal.widgets.CheckboxButton; import com.bdaum.zoom.ui.internal.widgets.WatermarkGroup; import com.bdaum.zoom.ui.internal.widgets.WidgetFactory; import com.bdaum.zoom.ui.internal.wizards.ExportModeGroup; import com.bdaum.zoom.ui.widgets.CGroup; @SuppressWarnings("restriction") public class ExportToCommunityPage extends AbstractExportToCommunityPage implements IAdaptable { private CheckboxButton metaButton; private boolean hasRawImaages = false; private AlbumDescriptor[] associatedAlbums; private final String[] titles; private final String[] descriptions; private CheckboxButton descriptionButton; private WatermarkGroup watermarkGroup; private ExportModeGroup exportModeGroup; private int media = IMediaSupport.PHOTO; private boolean multimedia; public ExportToCommunityPage(IConfigurationElement configElement, List<Asset> assets, AlbumDescriptor[] associatedAlbums, String[] titles, String[] descriptions, String id, String title, ImageDescriptor titleImage) { super(configElement, assets, id, title, titleImage); this.assets = assets; this.associatedAlbums = associatedAlbums; this.titles = titles; this.descriptions = descriptions; String attribute = configElement.getAttribute("media"); //$NON-NLS-1$ if (attribute != null && attribute.length() > 0) { try { media = Integer.parseInt(attribute); } catch (NumberFormatException e) { // use default } } for (Iterator<Asset> it = assets.iterator(); it.hasNext();) { Asset asset = it.next(); IMediaSupport mediaSupport = CoreActivator.getDefault().getMediaSupport(asset.getFormat()); if (mediaSupport != null) { if (!mediaSupport.testProperty(media)) { it.remove(); continue; } } else if ((media & QueryField.PHOTO) == 0) { it.remove(); continue; } if (ImageConstants.isRaw(asset.getUri(), true)) { hasRawImaages = true; break; } } multimedia = Core.getCore().isMultiMedia(assets); int size = assets.size(); msg = (assets.isEmpty()) ? Messages.ExportToCommunityPage_nothing_to_export : multimedia ? Messages.ExportToCommunityPage_exporting_multimedia : size == 1 ? Messages.ExportToCommunityPage_exporting_one_image : NLS.bind(Messages.ExportToCommunityPage_exporting_n_images, size); } @SuppressWarnings("unused") @Override public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); new Label(composite, SWT.NONE); createAccountGroup(composite); boolean raw = Core.getCore().containsRawImage(assets, true); exportModeGroup = new ExportModeGroup(composite, multimedia ? ExportModeGroup.ORIGINALS : ExportModeGroup.ALLFORMATS | ExportModeGroup.SIZING | (raw ? ExportModeGroup.RAWCROP : 0), multimedia ? Messages.ExportToCommunityPage_media : Messages.ExportToCommunityPage_image); exportModeGroup.addListener(new Listener() { @Override public void handleEvent(Event e) { updateControls(); checkImages(); } }); final CGroup metaGroup = UiUtilities.createGroup(parent, 1, Messages.ExportToCommunityPage_metadata); if (!multimedia) { metaButton = WidgetFactory.createCheckButton(metaGroup, Messages.ExportToCommunityPage_include_metadata, null); metaButton.addListener(new Listener() { @Override public void handleEvent(Event event) { getWizard().getContainer().updateButtons(); } }); } descriptionButton = WidgetFactory.createCheckButton(metaGroup, Messages.ExportToCommunityPage_show_descriptions, null); if (!multimedia) watermarkGroup = new WatermarkGroup(metaGroup); setTitle(Messages.ExportToCommunityPage_title); setMessage(msg); fillValues(); checkImages(); setControl(composite); setHelp(HelpContextIds.EXPORTCOMMUNITY_WIZARD); super.createControl(parent); } @Override protected void updateFields() { super.updateFields(); IStructuredSelection sel = accountViewer.getStructuredSelection(); if (!sel.isEmpty()) { CommunityAccount account = (CommunityAccount) sel.getFirstElement(); boolean noOrigs = !account.isSupportsRaw() && hasRawImaages; if (noOrigs) { exportModeGroup.setOriginalsEnabled(false); setMessage(msg + Messages.ExportToCommunityPage_cannot_send_orginals); } else setMessage(msg); } validatePage(); } @Override protected void validatePage() { String message = assets.isEmpty() ? Messages.ExportToCommunityPage_no_images_selected : checkAccount(); if (message == null && watermarkGroup != null) message = watermarkGroup.validate(); setErrorMessage(message); setPageComplete(message == null); } private void checkImages() { int allmx = 16; try (Assetbox box = new Assetbox(assets, null, false)) { for (File file : box) if (file != null) { Asset asset = box.getAsset(); allmx = Math.max(allmx, Math.max(asset.getWidth(), asset.getHeight())); } setErrorMessage(box.getErrorMessage()); } exportModeGroup.setMaximumDim(allmx); exportModeGroup.updateScale(); } @Override protected void fillValues() { super.fillValues(); IDialogSettings settings = getDialogSettings(); exportModeGroup.fillValues(settings); if (settings != null) { if (watermarkGroup != null) watermarkGroup.fillValues(settings); descriptionButton.setSelection(settings.getBoolean(CommunityExportWizard.SHOWDESCRIPTIONS)); if (metaButton != null) metaButton.setSelection(settings.getBoolean(CommunityExportWizard.INCLUDEMETA)); } updateControls(); } @Override protected boolean doFinish(CommunityAccount acc) throws CommunicationException, AuthException { CommunityApi api = ((CommunityExportWizard) getWizard()).getApi(); Session session = new Session(api, acc); session.init(); if (acc.isAuthenticated()) { new ExportToCommunityJob(configElement, assets, associatedAlbums, titles, descriptions, getMode(), getSizing(), exportModeGroup.getScalingFactor(), exportModeGroup.getDimension(), exportModeGroup.getCropMode(), exportModeGroup.getUnsharpMask(), exportModeGroup.getJpegQuality(), session, getIncludeMeta() ? ((CommunityExportWizard) getWizard()).getFilter() : null, descriptionButton.getSelection(), watermarkGroup == null ? false : watermarkGroup.getCreateWatermark(), watermarkGroup == null ? "" : watermarkGroup.getCopyright(), this).schedule(); //$NON-NLS-1$ return true; } return false; } private int getSizing() { return exportModeGroup.getSizing(); } @Override protected void saveSettings() { IDialogSettings settings = getDialogSettings(); if (settings != null) { exportModeGroup.saveSettings(settings); if (watermarkGroup != null) watermarkGroup.saveSettings(settings); settings.put(CommunityExportWizard.SHOWDESCRIPTIONS, getShowDescriptions()); settings.put(CommunityExportWizard.INCLUDEMETA, getIncludeMeta()); super.saveSettings(); } } private boolean getShowDescriptions() { return descriptionButton.getSelection(); } protected boolean getIncludeMeta() { return metaButton == null ? false : metaButton.getSelection(); } protected int getMode() { return exportModeGroup.getMode(); } private void updateControls() { boolean enabled = getMode() != Constants.FORMAT_ORIGINAL; if (metaButton != null) metaButton.setEnabled(enabled); if (watermarkGroup != null) watermarkGroup.setEnabled(getMode() != Constants.FORMAT_ORIGINAL); } }