package com.juick.command; import com.juick.Tag; import com.juick.User; import com.juick.server.protocol.ProtocolListener; import com.juick.service.SubscriptionService; import com.juick.service.TagService; import lombok.Getter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.regex.Pattern; /** * @author ma1uta */ @Component @Getter public class SubscribeTag extends MultiArgsCommand { private static final Pattern PATTERN = Pattern.compile("^([su])\\s+\\*(\\S+)$", Pattern.CASE_INSENSITIVE); private final TagService tagService; private final SubscriptionService subscriptionService; @Autowired public SubscribeTag(TagService tagService, SubscriptionService subscriptionService) { this.tagService = tagService; this.subscriptionService = subscriptionService; } @Override public Pattern pattern() { return PATTERN; } @Override public String help() { return "S *tag - subscribe to tag\nU *tag - unsubscribe from tag"; } @Override protected String execute(User sender, ProtocolListener protocolListener, String... arguments) { boolean subscribe = arguments[0].equalsIgnoreCase("s"); Tag tag = getTagService().getTag(arguments[1], true); if (subscribe) { if (getSubscriptionService().subscribeTag(sender, tag)) { return "Subscribed"; } } else { if (getSubscriptionService().unSubscribeTag(sender, tag)) { return "Unsubscribed from " + tag.getName(); } return "You was not subscribed to " + tag.getName(); } return "Error"; } }