Fix new null warnings
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.ui / src / org / eclipse / tracecompass / internal / tmf / ui / project / wizards / tracepkg / importexport / TracePackageExtractManifestOperation.java
... / ...
CommitLineData
1/*******************************************************************************
2 * Copyright (c) 2013, 2014 Ericsson
3 *
4 * All rights reserved. This program and the accompanying materials are
5 * made available under the terms of the Eclipse Public License v1.0 which
6 * accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Marc-Andre Laperle - Initial API and implementation
11 *******************************************************************************/
12
13package org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.importexport;
14
15import java.io.InputStream;
16import java.text.MessageFormat;
17import java.util.ArrayList;
18import java.util.Enumeration;
19import java.util.HashSet;
20import java.util.List;
21import java.util.Set;
22
23import org.eclipse.core.runtime.IPath;
24import org.eclipse.core.runtime.IProgressMonitor;
25import org.eclipse.core.runtime.IStatus;
26import org.eclipse.core.runtime.Path;
27import org.eclipse.core.runtime.Status;
28import org.eclipse.jdt.annotation.NonNull;
29import org.eclipse.jface.operation.ModalContext;
30import org.eclipse.tracecompass.internal.tmf.ui.Activator;
31import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.AbstractTracePackageOperation;
32import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.ITracePackageConstants;
33import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageElement;
34import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageFilesElement;
35import org.eclipse.tracecompass.internal.tmf.ui.project.wizards.tracepkg.TracePackageTraceElement;
36
37/**
38 * An operation that extracts information from the manifest located in an
39 * archive
40 *
41 * @author Marc-Andre Laperle
42 */
43public class TracePackageExtractManifestOperation extends AbstractTracePackageOperation {
44
45 /**
46 * Constructs a new import operation for reading the manifest
47 *
48 * @param fileName
49 * the output file name
50 */
51 public TracePackageExtractManifestOperation(String fileName) {
52 super(fileName);
53 }
54
55 /**
56 * Run extract the manifest operation. The status (result) of the operation
57 * can be obtained with {@link #getStatus}
58 *
59 * @param progressMonitor
60 * the progress monitor to use to display progress and receive
61 * requests for cancellation
62 */
63 @Override
64 public void run(IProgressMonitor progressMonitor) {
65 TracePackageElement[] elements = null;
66 try {
67 progressMonitor.worked(1);
68 ArchiveFile archiveFile = getSpecifiedArchiveFile();
69 progressMonitor.worked(1);
70 if (archiveFile == null) {
71 setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.TracePackageExtractManifestOperation_InvalidFormat));
72 return;
73 }
74
75 Enumeration<@NonNull ?> entries = archiveFile.entries();
76
77 boolean found = false;
78 while (entries.hasMoreElements()) {
79 ModalContext.checkCanceled(progressMonitor);
80
81 ArchiveEntry entry = (ArchiveEntry) entries.nextElement();
82 IPath p = new Path(entry.getName());
83 //Remove project name
84 p = p.removeFirstSegments(1);
85
86 if (entry.getName().endsWith(ITracePackageConstants.MANIFEST_FILENAME)) {
87 found = true;
88 InputStream inputStream = archiveFile.getInputStream(entry);
89 ManifestReader.validateManifest(inputStream);
90
91 inputStream = archiveFile.getInputStream(entry);
92 elements = ManifestReader.loadElementsFromManifest(inputStream);
93 break;
94 }
95
96 progressMonitor.worked(1);
97 }
98
99 if (found) {
100 setStatus(Status.OK_STATUS);
101 }
102 else {
103 elements = generateElementsFromArchive();
104 if (elements.length > 0) {
105 setStatus(Status.OK_STATUS);
106 } else {
107 setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, MessageFormat.format(Messages.TracePackageExtractManifestOperation_ErrorManifestNotFound, ITracePackageConstants.MANIFEST_FILENAME)));
108 }
109 }
110
111 setResultElements(elements);
112
113 } catch (InterruptedException e) {
114 setStatus(Status.CANCEL_STATUS);
115 } catch (Exception e) {
116 setStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.TracePackageExtractManifestOperation_ErrorReadingManifest, e));
117 }
118 }
119
120 private TracePackageElement[] generateElementsFromArchive() {
121 ArchiveFile archiveFile = getSpecifiedArchiveFile();
122 Enumeration<@NonNull ?> entries = archiveFile.entries();
123 Set<String> traceFileNames = new HashSet<>();
124 while (entries.hasMoreElements()) {
125 ArchiveEntry entry = (ArchiveEntry) entries.nextElement();
126 String entryName = entry.getName();
127 IPath fullArchivePath = new Path(entryName);
128 if (!fullArchivePath.hasTrailingSeparator() && fullArchivePath.segmentCount() > 0) {
129 traceFileNames.add(fullArchivePath.segment(0));
130 }
131 }
132
133 List<TracePackageElement> packageElements = new ArrayList<>();
134 for (String traceFileName : traceFileNames) {
135 TracePackageTraceElement traceElement = new TracePackageTraceElement(null, traceFileName, null);
136 new TracePackageFilesElement(traceElement, traceFileName);
137 packageElements.add(traceElement);
138 }
139
140 return packageElements.toArray(new TracePackageElement[] {});
141 }
142
143}
This page took 0.024514 seconds and 5 git commands to generate.