package com.jotuntech.sketcher.server.command; import java.awt.image.ImageObserver; import java.nio.ByteBuffer; import java.util.HashSet; import java.util.Set; import com.jotuntech.sketcher.common.Canvas; import com.jotuntech.sketcher.common.Layer; import com.jotuntech.sketcher.common.UndoEntry; import com.jotuntech.sketcher.common.User; import com.jotuntech.sketcher.server.AccessController; import com.jotuntech.sketcher.server.Command; import com.jotuntech.sketcher.server.CommandEntry; import com.jotuntech.sketcher.server.Connection; import com.jotuntech.sketcher.server.Server; public class DeleteLayerCommand implements Command { int layerKey; public DeleteLayerCommand() { } public DeleteLayerCommand(int layerKey) { this.layerKey = layerKey; } public int perform(Server server, Connection connection) { User user = connection.getUser(); if(user == null) { return Connection.SEND_NONE; } if(user.isViewer()) { return Connection.SEND_NONE; } /** Check access controller */ AccessController controller = server.getAccessController(); if(controller != null) { if(!controller.isLayerActionAllowed(server, user)) { connection.getSendQueue().offer(new CommandEntry(0, new ServerMessageCommand("You are not allowed to do that."))); return Connection.SEND_NONE; } } Canvas canvas = server.getCanvas(); Layer layer = canvas.getLayerMap().remove(layerKey); if(layer == null) { return Connection.SEND_NONE; } if(canvas.getImageObserver() != null) { canvas.getImageObserver().imageUpdate(null, ImageObserver.ALLBITS, 0, 0, canvas.getWidth(), canvas.getHeight()); } // Remove references to layer from undo deque for(Connection c: server.getConnectionMap().values()) { Set uers = new HashSet(); if(c.getUser() == null) { continue; } for(UndoEntry ue : c.getUser().getUndoDeque()) { if(ue.getLayer() == layer) { uers.add(ue); } } for(UndoEntry ue : uers) { c.getUser().getUndoDeque().remove(ue); } } return Connection.SEND_ALL; } public void decode(ByteBuffer in) { layerKey = in.getInt(); } public void encode(ByteBuffer out) { out.putInt(layerKey); } }