class ServiceAddedEvent implements ClusterTask<Void> {
    private String subdomain;
    private String description;
    private Boolean isHidden;

    public ServiceAddedEvent() {
    }

    public ServiceAddedEvent(String subdomain, String description, Boolean isHidden) {
        this.subdomain = subdomain;
        this.description = description;
        this.isHidden = isHidden;
    }

    @Override
    public Void getResult() {
        return null;
    }

    @Override
    public void run() {
        // If it's registered already, no need to create it.  Most likely this is because the service
        // is provided by an internal component that registered at startup.  This scenario, however,
        // should really never occur.
        if (!XMPPServer.getInstance().getMultiUserChatManager().isServiceRegistered(subdomain)) {
            MultiUserChatService service = new MultiUserChatServiceImpl(subdomain, description, isHidden);
            XMPPServer.getInstance().getMultiUserChatManager().registerMultiUserChatService(service, false);
        }
    }

    @Override
    public void writeExternal(ObjectOutput out) throws IOException {
        final ExternalizableUtil externalizableUtil = ExternalizableUtil.getInstance();
        externalizableUtil.writeSafeUTF(out, subdomain);
        externalizableUtil.writeSafeUTF(out, description);
        externalizableUtil.writeBoolean(out, isHidden);
    }

    @Override
    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {<FILL_FUNCTION_BODY>}
}

        final ExternalizableUtil externalizableUtil = ExternalizableUtil.getInstance();
        subdomain = externalizableUtil.readSafeUTF(in);
        description = externalizableUtil.readSafeUTF(in);
        isHidden = externalizableUtil.readBoolean(in);
    
<no_super_class>