/*
* Copyright 2012 Research Studios Austria Forschungsges.m.b.H.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package won.protocol.jms;
import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.sparql.path.Path;
import org.apache.jena.sparql.path.PathParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.client.HttpClientErrorException;
import won.protocol.model.ProtocolType;
import won.protocol.util.RdfUtils;
import won.protocol.vocabulary.WON;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* User: sbyim
* Date: 28.11.13
*/
public class MatcherActiveMQServiceImpl extends ActiveMQServiceImpl implements MatcherActiveMQService {
private final Logger logger = LoggerFactory.getLogger(getClass());
private List<String> matcherProtocolTopicList;
private String pathInformation;
private static final String PATH_MATCHER_PROTOCOL_OUT_NEED_CREATED = "<"+WON.SUPPORTS_WON_PROTOCOL_IMPL + ">/<" + WON.HAS_ACTIVEMQ_MATCHER_PROTOCOL_OUT_NEED_CREATED_TOPIC_NAME+">";
private static final String PATH_MATCHER_PROTOCOL_OUT_NEED_ACTIVATED = "<"+WON.SUPPORTS_WON_PROTOCOL_IMPL + ">/<" + WON.HAS_ACTIVEMQ_MATCHER_PROTOCOL_OUT_NEED_ACTIVATED_TOPIC_NAME+">";
private static final String PATH_MATCHER_PROTOCOL_OUT_NEED_DEACTIVATED = "<"+WON.SUPPORTS_WON_PROTOCOL_IMPL + ">/<" + WON.HAS_ACTIVEMQ_MATCHER_PROTOCOL_OUT_NEED_DEACTIVATED_TOPIC_NAME+">";
private static final String PATH_MATCHER_PROTOCOL_OUT_MATCHER_REGISTERED = "<"+WON.SUPPORTS_WON_PROTOCOL_IMPL + ">/<"
+ WON
.HAS_ACTIVEMQ_MATCHER_PROTOCOL_OUT_MATCHER_REGISTERED_TOPIC_NAME+">";
private static final String PATH_MATCHER_PROTOCOL_QUEUE_NAME = "<" + WON.SUPPORTS_WON_PROTOCOL_IMPL + ">/<" + WON.HAS_ACTIVEMQ_MATCHER_PROTOCOL_QUEUE_NAME + ">";
public MatcherActiveMQServiceImpl(ProtocolType type) {
super(type);
queueNamePath = PATH_MATCHER_PROTOCOL_QUEUE_NAME;
//pathInformation = "/resource";
matcherProtocolTopicList = new ArrayList<>();
matcherProtocolTopicList.add(PATH_MATCHER_PROTOCOL_OUT_NEED_ACTIVATED);
matcherProtocolTopicList.add(PATH_MATCHER_PROTOCOL_OUT_NEED_CREATED);
matcherProtocolTopicList.add(PATH_MATCHER_PROTOCOL_OUT_NEED_DEACTIVATED);
}
public final Set<String> getMatcherProtocolTopicNamesWithResource(URI resourceURI){
Set<String> activeMQMatcherProtocolTopicNames = new HashSet<>();
for (int i = 0; i< matcherProtocolTopicList.size();i++){
try{
Path path = PathParser.parse(matcherProtocolTopicList.get(i),PrefixMapping.Standard);
activeMQMatcherProtocolTopicNames.add(RdfUtils.getStringPropertyForPropertyPath(
linkedDataSource.getDataForResource(resourceURI),
resourceURI,
path
));
}catch (HttpClientErrorException e){
if (e.getStatusCode() == HttpStatus.NOT_FOUND){
return null;
}
else throw e;
}
}
return activeMQMatcherProtocolTopicNames;
}
}