/* Copyright (C) 2009 Mobile Sorcery AB
This program is free software; you can redistribute it and/or modify it
under the terms of the Eclipse Public License v1.0.
This program 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 Eclipse Public License v1.0 for
more details.
You should have received a copy of the Eclipse Public License v1.0 along
with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html
*/
package com.mobilesorcery.sdk.core;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.Status;
import com.mobilesorcery.sdk.internal.dependencies.DependencyManager.Delta;
public class BuildResult implements IBuildResult {
private Map<String, List<File>> buildResult = new HashMap<String, List<File>>();
private final ArrayList<String> errors = new ArrayList<String>();
private final IProject project;
private boolean success;
private IBuildVariant variant;
private long timestamp;
private Delta<IResource> dependencyDelta;
private final HashMap<String, File> intermediateBuildResults = new HashMap<String, File>();
public BuildResult(IProject project) {
this.project = project;
}
@Override
public void addError(String errorMsg) {
this.errors.add(errorMsg);
}
@Override
public List<String> getErrors() {
return errors;
}
@Override
public CoreException createException() {
if (errors.isEmpty()) {
return null;
} else {
MultiStatus status = new MultiStatus(CoreMoSyncPlugin.PLUGIN_ID, 1, "Build failed", null);
for (String error : errors) {
IStatus subStatus = new Status(IStatus.ERROR, CoreMoSyncPlugin.PLUGIN_ID, error);
status.add(subStatus);
}
return new CoreException(status);
}
}
@Override
public Map<String, List<File>> getBuildResult() {
return buildResult;
}
@Override
public void setBuildResult(Map<String, List<File>> buildResult) {
this.buildResult = buildResult;
}
@Override
public void setBuildResult(String key, File... buildResult) {
this.buildResult.put(key, Arrays.asList(buildResult));
}
@Override
public boolean success() {
return success && errors.isEmpty();
}
public void setSuccess(boolean success) {
this.success = success;
}
public IProject getProject() {
return project;
}
@Override
public IBuildVariant getVariant() {
return variant;
}
public void setVariant(IBuildVariant variant) {
this.variant = variant;
}
@Override
public long getTimestamp() {
return timestamp;
}
@Override
public void setTimestamp(long utc) {
this.timestamp = utc;
}
public void setDependencyDelta(Delta<IResource> dependencyDelta) {
this.dependencyDelta = dependencyDelta;
}
@Override
public Delta<IResource> getDependencyDelta() {
return dependencyDelta;
}
@Override
public File getIntermediateBuildResult(String buildStepId) {
return intermediateBuildResults.get(buildStepId);
}
@Override
public void setIntermediateBuildResult(String buildStepId, File file) {
intermediateBuildResults.put(buildStepId, file);
}
public static boolean exists(Map<String, List<File>> buildArtifacts) {
for (Map.Entry<String, List<File>> buildArtifact : buildArtifacts.entrySet()) {
List<File> files = buildArtifact.getValue();
for (File file : files) {
if (file == null || !file.exists()) {
return false;
}
}
}
return true;
}
}