Sketcher2 source code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.3 KiB

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<UndoEntry> uers = new HashSet<UndoEntry>();
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);
}
}