/******************************************************************************* * Copyright (c) 2016 Weasis Team 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: * Nicolas Roduit - initial API and implementation *******************************************************************************/ package org.weasis.dicom.explorer; import java.awt.Desktop; import java.io.File; import java.util.Map; import javax.swing.Icon; import javax.swing.ImageIcon; import org.weasis.core.api.gui.util.AppProperties; import org.weasis.core.api.media.MimeInspector; import org.weasis.core.api.media.data.MediaElement; import org.weasis.core.api.media.data.MediaSeries; import org.weasis.core.ui.editor.MimeSystemAppViewer; import org.weasis.core.ui.editor.SeriesViewer; import org.weasis.core.ui.editor.SeriesViewerFactory; import org.weasis.dicom.codec.DicomMediaIO; import org.weasis.dicom.codec.FilesExtractor; @org.osgi.service.component.annotations.Component(service = SeriesViewerFactory.class, immediate = false) public class MimeSystemAppFactory implements SeriesViewerFactory { public static final String NAME = Messages.getString("MimeSystemAppViewer.app"); //$NON-NLS-1$ public static final Icon ICON = new ImageIcon(MimeInspector.class.getResource("/icon/16x16/apps-system.png")); //$NON-NLS-1$ public static final MimeSystemAppViewer mimeSystemViewer = new MimeSystemAppViewer() { @Override public String getPluginName() { return NAME; } @Override public void addSeries(MediaSeries series) { if (series instanceof FilesExtractor) { // As SUN JRE supports only Gnome and responds "true" for Desktop.isDesktopSupported() // in KDE session, but actually does not support it. // http://bugs.sun.com/view_bug.do?bug_id=6486393 FilesExtractor extractor = (FilesExtractor) series; for (File file : extractor.getExtractFiles()) { if (AppProperties.OPERATING_SYSTEM.startsWith("linux")) { //$NON-NLS-1$ startAssociatedProgramFromLinux(file); } else if (AppProperties.OPERATING_SYSTEM.startsWith("win")) { //$NON-NLS-1$ // Workaround of the bug with mpg file see http://bugs.sun.com/view_bug.do?bug_id=6599987 startAssociatedProgramFromWinCMD(file); } else if (Desktop.isDesktopSupported()) { final Desktop desktop = Desktop.getDesktop(); if (desktop.isSupported(Desktop.Action.OPEN)) { startAssociatedProgramFromDesktop(desktop, file); } } } } } @Override public String getDockableUID() { return null; } }; public MimeSystemAppFactory() { } @Override public Icon getIcon() { return ICON; } @Override public String getUIName() { return NAME; } @Override public String getDescription() { return NAME; } @Override public boolean canReadMimeType(String mimeType) { return DicomMediaIO.SERIES_VIDEO_MIMETYPE.equals(mimeType) || DicomMediaIO.SERIES_ENCAP_DOC_MIMETYPE.equals(mimeType); } @Override public boolean isViewerCreatedByThisFactory(SeriesViewer<? extends MediaElement> viewer) { return false; } @Override public SeriesViewer<? extends MediaElement> createSeriesViewer(Map<String, Object> properties) { return mimeSystemViewer; } @Override public int getLevel() { return 100; } @Override public boolean canAddSeries() { return false; } @Override public boolean canExternalizeSeries() { return false; } }