/**
* Copyright (C) 2014 Cohesive Integrations, LLC (info@cohesiveintegrations.com)
*
* 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 net.di2e.ecdr.search.transform.atom.response.security;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.xml.namespace.QName;
import net.di2e.ecdr.commons.CDRMetacard;
import net.di2e.ecdr.commons.constants.SecurityConstants;
import net.di2e.ecdr.search.transform.atom.security.SecurityDataImpl;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.commons.lang.StringUtils;
import ddf.catalog.data.Metacard;
public final class SecurityMarkingParser {
private static final Set<String> NAMESPACES = new HashSet<String>();
static {
NAMESPACES.add( "urn:us:gov:ic:ism:v2" );
NAMESPACES.add( "urn:us:gov:ic:ism" );
}
private SecurityMarkingParser() {
}
public static Metacard addSecurityToMetacard( Metacard metacard, Entry entry ) {
HashMap<String, List<String>> securityProps = new HashMap<String, List<String>>();
CDRMetacard metacardImpl = new CDRMetacard( metacard );
List<QName> attributes = entry.getAttributes();
if ( attributes != null ) {
String metacardSecurityNamespace = null;
for ( QName qName : attributes ) {
String namespace = qName.getNamespaceURI();
if ( NAMESPACES.contains( namespace ) ) {
String value = entry.getAttributeValue( qName );
if ( StringUtils.isNotBlank( value ) ) {
securityProps.put( qName.getLocalPart(), getValues( value ) );
if ( metacardSecurityNamespace == null ) {
metacardSecurityNamespace = namespace;
}
}
}
}
if ( !securityProps.isEmpty() ) {
metacardImpl.setSecurity( securityProps );
metacardImpl.setAttribute( SecurityConstants.SECURITY_NAMESPACE, metacardSecurityNamespace );
}
}
return metacardImpl;
}
public static SecurityDataImpl getFeedSecurityMarkings( Feed feed ) {
List<QName> attributes = feed.getAttributes();
if ( attributes != null ) {
HashMap<String, List<String>> securityProps = new HashMap<String, List<String>>();
String feedNamespace = null;
for ( QName qName : attributes ) {
String namespace = qName.getNamespaceURI();
if ( NAMESPACES.contains( namespace ) ) {
String value = feed.getAttributeValue( qName );
if ( StringUtils.isNotBlank( value ) ) {
securityProps.put( qName.getLocalPart(), getValues( value ) );
if ( feedNamespace == null ) {
feedNamespace = namespace;
}
}
}
}
if ( !securityProps.isEmpty() ) {
return new SecurityDataImpl( securityProps, feedNamespace );
}
}
return null;
}
public static List<String> getValues( String attributeValue ) {
String[] values = attributeValue.split( " " );
return Arrays.asList( values );
}
}