package org.openslx.dozmod.thrift; import java.awt.Frame; import java.nio.ByteBuffer; import java.util.Map; import org.apache.log4j.Logger; import org.apache.thrift.TException; import org.openslx.bwlp.thrift.iface.ImageBaseWrite; import org.openslx.bwlp.thrift.iface.ImageDetailsRead; import org.openslx.bwlp.thrift.iface.ImagePermissions; import org.openslx.bwlp.thrift.iface.ImageVersionDetails; import org.openslx.bwlp.thrift.iface.TAuthorizationException; import org.openslx.bwlp.thrift.iface.TInvocationException; import org.openslx.bwlp.thrift.iface.TNotFoundException; import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.thrift.ThriftActions.DeleteCallback; import org.openslx.dozmod.thrift.ThriftActions.ImageMetaCallback; import org.openslx.thrifthelper.ThriftManager; import org.openslx.util.QuickTimer; import org.openslx.util.QuickTimer.Task; public class ImageLocalDetailsActions implements ImageDetailsActions { private final static Logger LOGGER = Logger.getLogger(ImageLocalDetailsActions.class); private final Frame parent; public ImageLocalDetailsActions(final Frame parent) { this.parent = parent; } @Override public void getImageDetails(final String imageBaseId, final ImageMetaCallback callback) { QuickTimer.scheduleOnce(new Task() { ImageDetailsRead details = null; Map permissions = null; @Override public void fire() { details = ThriftActions.getImageDetails(parent, imageBaseId); permissions = ThriftActions.getImagePermissions(parent, imageBaseId); Gui.asyncExec(new Runnable() { @Override public void run() { if (callback != null) { callback.fetchedImageDetails(details, permissions); } } }); } }); } @Override public boolean setImageOwner(final String imageBaseId, final UserInfo user) { return ThriftActions.setImageOwner(parent, imageBaseId, user); } @Override public void updateImageBase(final String imageBaseId, final ImageBaseWrite data) throws TException, TAuthorizationException, TNotFoundException, TInvocationException { ThriftActions.updateImageBase(imageBaseId, data); } @Override public void writeImagePermissions(final String imageBaseId, final Map customPermissions) throws TException { QuickTimer.scheduleOnce(new Task() { @Override public void fire() { try { ThriftActions.writeImagePermissions(imageBaseId, customPermissions); } catch (TException e) { ThriftError.showMessage(parent, LOGGER, e, "Could not write permissions"); } } }); ThriftActions.writeImagePermissions(imageBaseId, customPermissions); } @Override public void deleteImageVersion(final ImageVersionDetails version, final DeleteCallback callback) { ThriftActions.deleteImageVersion(parent, version, callback); } @Override public boolean isImagePublishSupported() { // check that the API of the satellite server is at least 3 // (anything > 3 supports publications of images) return Session.isImagePublishSupported(); } @Override public void setVirtualizerConfig(final String imageVersionId, final ByteBuffer machineDescription, final VirtConfCallback callback) { QuickTimer.scheduleOnce(new Task() { boolean success = false; @Override public void fire() { try { ThriftManager.getSatClient().setImageVersionVirtConfig(Session.getSatelliteToken(), imageVersionId, machineDescription); success = true; } catch (TException e) { ThriftError.showMessage(parent, LOGGER, e, "Fehler beim Speichern der VM-Konfiguration!"); } Gui.asyncExec(new Runnable() { @Override public void run() { if (success && callback != null) { callback.virtConfCallback(success); } } }); } }); } }