package sk.stuba.fiit.perconik.activity.serializers.command; import java.util.Set; import org.eclipse.core.commands.Command; import org.eclipse.core.commands.IParameter; import org.eclipse.core.commands.common.NotDefinedException; import sk.stuba.fiit.perconik.activity.serializers.AbstractConfigurableMultiSerializer; import sk.stuba.fiit.perconik.data.content.StructuredContent; import static java.util.Arrays.asList; import static sk.stuba.fiit.perconik.activity.serializers.Serializations.putObjectIdentity; import static sk.stuba.fiit.perconik.data.content.StructuredContents.key; import static sk.stuba.fiit.perconik.utilities.MoreArrays.nullToEmpty; public final class CommandSerializer extends AbstractConfigurableMultiSerializer<Command> { public CommandSerializer(final Option ... options) { super(options); } public CommandSerializer(final Iterable<Option> options) { super(options); } static void putCommand(final StructuredContent content, final Command command, final Set<Option> options) { content.put(key("identifier"), command.getId()); try { content.put(key("name"), command.getName()); content.put(key("description"), command.getDescription()); } catch (NotDefinedException ignore) {} try { content.put(key("category"), new CategorySerializer(options).serialize(command.getCategory())); } catch (NotDefinedException ignore) {} try { content.put(key("parameters"), new ParameterSerializer(options).serialize(asList(nullToEmpty(IParameter.class, command.getParameters())))); } catch (NotDefinedException ignore) {} try { content.put(key("returnType"), new ParameterTypeSerializer(options).serialize(command.getReturnType())); } catch (NotDefinedException ignore) {} content.put(key("handler"), new HandlerSerializer(options).serialize(command.getHandler())); content.put(key("isDefined"), command.isDefined()); content.put(key("isEnabled"), command.isEnabled()); content.put(key("isHandled"), command.isHandled()); } @Override protected void put(final StructuredContent content, final Command command) { putObjectIdentity(content, command); putCommand(content, command, this.options); } }