/**
* (C) Copyright 2013 Jabylon (http://www.jabylon.org) and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
/**
*
*/
package org.jabylon.review.standard.internal;
import java.util.Map;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.felix.scr.annotations.Service;
import org.jabylon.common.review.ReviewParticipant;
import org.jabylon.common.review.TerminologyProvider;
import org.jabylon.properties.PropertiesFactory;
import org.jabylon.properties.Property;
import org.jabylon.properties.PropertyFileDescriptor;
import org.jabylon.properties.Review;
import org.jabylon.properties.Severity;
/**
* @author Johannes Utzig (jutzig.dev@googlemail.com)
*
*/
@Component
@Service
public class EqualityCheck implements ReviewParticipant {
@Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY,policy=ReferencePolicy.DYNAMIC)
private TerminologyProvider terminologyProvider;
/* (non-Javadoc)
* @see org.jabylon.common.review.ReviewParticipant#review(org.jabylon.properties.PropertyFileDescriptor, org.jabylon.properties.Property, org.jabylon.properties.Property)
*/
@Override
public Review review(PropertyFileDescriptor descriptor, Property master, Property slave) {
if(master==null||slave==null)
return null;
String masterValue = master.getValue();
String slaveValue = slave.getValue();
if(masterValue!=null)
{
if(masterValue.equals(slaveValue))
{
if(terminologyProvider!=null) {
Map<String, Property> terminology = terminologyProvider.getTerminology(descriptor.getVariant());
Property terminologyEntry = terminology.get(slave.getValue());
if(terminologyEntry!=null && slave.getValue().equals(terminologyEntry.getValue())){
// equality is ok if it is like that in terminology. That could be the case for e.g. a product name
// or short terms like "OK"
return null;
}
}
Review review = PropertiesFactory.eINSTANCE.createReview();
review.setCreated(System.currentTimeMillis());
review.setMessage("Template and translated string are identical");
review.setReviewType(getReviewType());
review.setSeverity(Severity.WARNING);
review.setUser("Jabylon");
return review;
}
}
return null;
}
@Override
public String getReviewType() {
return "Equality Check";
}
public void bindTerminologyProvider(TerminologyProvider provider) {
this.terminologyProvider = provider;
}
public void unbindTerminologyProvider(TerminologyProvider provider) {
if(terminologyProvider==provider)
terminologyProvider = null;
}
@Override
public String getID() {
return "EqualityCheck";
}
@Override
public String getDescription() {
return "%equality.check.description";
}
@Override
public String getName() {
return "%equality.check.name";
}
}