/****************************************************************************** * Copyright (c) 2016 Oracle * 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: * Konstantin Komissarchik - initial implementation and ongoing maintenance ******************************************************************************/ package org.eclipse.sapphire.platform; import java.util.SortedSet; import org.eclipse.core.runtime.IStatus; import org.eclipse.sapphire.modeling.Status; import org.eclipse.sapphire.modeling.Status.Severity; /** * Bridges between Sapphire and Eclipse status API. * * @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a> */ public final class StatusBridge { private StatusBridge() { // This class is not meant to be instantiated. } public static IStatus create( final Status status ) { final SortedSet<Status> childrenOriginal = status.children(); final IStatus[] childrenBridged = new IStatus[ childrenOriginal.size() ]; int i = 0; for( Status child : childrenOriginal ) { childrenBridged[ i ] = create( child ); i++; } final int severity; switch( status.severity() ) { case ERROR: severity = IStatus.ERROR; break; case WARNING: severity = IStatus.WARNING; break; default: severity = IStatus.OK; break; } return new IStatus() { public IStatus[] getChildren() { return childrenBridged; } public int getCode() { return 0; } public Throwable getException() { return status.exception(); } public String getMessage() { return status.message(); } public String getPlugin() { return "org.eclipse.sapphire"; } public int getSeverity() { return severity; } public boolean isMultiStatus() { return ( ! status.children().isEmpty() ); } public boolean isOK() { return ( status.severity() == Status.Severity.OK ); } public boolean matches( final int severityMask ) { return ( ( getSeverity() & severityMask ) != 0 ); } }; } public static Status create( final IStatus status ) { if( status.isMultiStatus() ) { final Status.CompositeStatusFactory factory = Status.factoryForComposite(); for( IStatus st : status.getChildren() ) { factory.merge( create( st ) ); } return factory.create(); } else { final Status.LeafStatusFactory factory = Status.factoryForLeaf(); factory.message( status.getMessage() ); switch( status.getSeverity() ) { case IStatus.ERROR: factory.severity( Severity.ERROR ); break; case IStatus.WARNING: factory.severity( Severity.WARNING ); break; default: factory.severity( Severity.OK ); break; } factory.exception( status.getException() ); factory.type( "Sapphire.Bridged." + status.getPlugin() + "." + status.getCode() ); return factory.create(); } } }