package uk.bl.api;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.Expr;
import com.fasterxml.jackson.annotation.JsonIgnore;
import play.Logger;
import uk.bl.exception.ActException;
import uk.bl.exception.WhoisException;
import models.CrawlPermission;
import models.FieldUrl;
import models.Target;
public enum FormHelper {
INSTANCE;
public boolean isInScopeAllWithoutLicense(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.isInScopeAllOrInheritedWithoutLicense();
}
public boolean hasGrantedLicense(Long targetId) {
Logger.debug("hasGrantedLicense");
// if QAStatus is granted
// this.crawlPermissions;
// this.qaIssue;
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.indicateLicenses();
}
public boolean indicateNpldStatus(Long targetId) throws ActException {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.indicateNpldStatus();
}
// to helper
public Set<Target> getUkwaLicenceStatusList(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return null;
return target.getUkwaLicenceStatusList();
}
/**
* determine wether this target has a license request underway, either directly or inherited from another target.
*
* @param targetId
* @return
*/
public boolean licensingUnderway(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
OverallLicenseStatus ols = target.getOverallLicenseStatus();
if( ols.pendingIncludingInherited ) return true;
return false;
}
/**
*
* @param targetId
* @return
*/
public boolean inheritedLicenceUnderwayOrGranted(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
OverallLicenseStatus ols = target.getOverallLicenseStatus();
if( ols.inheritedLicensePending || ols.inheritedLicense ) return true;
return false;
}
/**
* Indicate whether this target has a license or permission request, either direct or inherited.
* @param targetId
* @return
*/
public boolean indicateUkwaLicenceStatus(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.indicateLicenses();
}
/*
// FIXME This is insanely wrong.
public static Set<Target> getLowerTargets(FieldUrl fieldUrl) {
String query = "find target fetch fieldUrls where active = :active and fieldUrls.domain = :domain and LENGTH(fieldUrls.url) > :length";
Set<Target> higherTargets = Ebean.createQuery(Target.class, query)
.setParameter("active", true)
.setParameter("domain", fieldUrl.domain)
.setParameter("length", fieldUrl.url.length())
.findSet();
return higherTargets;
}
// FIXME This is insanely wrong.
public static Set<Target> getHigherTargetsWithLicenseAndQaIssue(FieldUrl fieldUrl) {
String query = "find target fetch fieldUrls fetch licenses where active = :active and fieldUrls.domain = :domain and LENGTH(fieldUrls.url) < :length";
Set<Target> higherTargets = Ebean.createQuery(Target.class, query)
.setParameter("active", true)
.setParameter("domain", fieldUrl.domain)
.setParameter("length", fieldUrl.url.length())
.where().or(Expr.isNotNull("licenses"), Expr.isNotNull("qaIssue"))
.findSet();
return higherTargets;
}
// FIXME This is insanely wrong.
public static Target getHigherLevelTargetLicense(FieldUrl fieldUrl) {
String query = "find target fetch fieldUrls fetch licenses where active = :active and fieldUrls.domain = :domain and LENGTH(fieldUrls.url) < :length";
Target higherTarget = Ebean.createQuery(Target.class, query)
.setParameter("active", true)
.setParameter("domain", fieldUrl.domain)
.setParameter("length", fieldUrl.url.length())
.where().isNotNull("licenses")
.findUnique();
return higherTarget;
}
// FIXME This is insanely wrong.
public static Set<Target> getHigherTargetsForNpld(FieldUrl fieldUrl) {
StringBuilder query = new StringBuilder("find target fetch fieldUrls where active = :active and fieldUrls.domain = :domain and LENGTH(fieldUrls.url) < :length and isUkHosting = :isUkHosting ");
query.append("and (ukPostalAddress = :ukPostalAddress or viaCorrespondence = :viaCorrespondence or professionalJudgement = :professionalJudgement or noLdCriteriaMet = :noLdCriteriaMet)");
Set<Target> higherTargets = Ebean.createQuery(Target.class, query.toString())
.setParameter("active", true)
.setParameter("domain", fieldUrl.domain)
.setParameter("length", fieldUrl.url.length())
.setParameter("isUkHosting", false)
.setParameter("ukPostalAddress", true)
.setParameter("viaCorrespondence", true)
.setParameter("professionalJudgement", true)
.setParameter("noLdCriteriaMet", true)
.findSet();
return higherTargets;
}
*/
// to helper
public boolean indicateLicenses(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.indicateLicenses();
}
public CrawlPermission getLatestCrawlPermission(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return null;
return target.getLatestCrawlPermission();
}
public boolean hasLicenseAndCrawlPermission(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.indicateLicenses() || (target.crawlPermissions != null && target.crawlPermissions.size() > 0);
}
public boolean enableLicenseCreation(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.enableLicenseCreation();
}
public boolean hasInvalidLicenses(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.hasInvalidLicenses();
}
@JsonIgnore
public boolean isUkHosting(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.isUkHosting;
}
@JsonIgnore
public boolean isTopLevelDomain(Long targetId) throws WhoisException, MalformedURLException, URISyntaxException {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.isTopLevelDomain;
}
public boolean isUkRegistration(Long targetId) throws WhoisException {
Target target = Target.findById(targetId);
if( target == null ) return false;
return target.isUkRegistration;
}
public Set<Target> getNpldStatusList(Long targetId) throws ActException {
Target target = Target.findById(targetId);
if( target == null ) return null;
return target.getNpldStatusList();
}
// to helper
public List<FieldUrl> fieldUrls(Long targetId) {
Target target = Target.findById(targetId);
if( target == null ) return null;
return target.fieldUrls;
}
public String getCreatedAtDate(Long targetId) throws WhoisException {
Target target = Target.findById(targetId);
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
if( target == null ) return null;
return dateFormat.format(target.createdAt);
}
public String getUpdatedAtDate(Long targetId) throws WhoisException {
Target target = Target.findById(targetId);
DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
if( target == null ) return null;
return dateFormat.format(target.updatedAt);
}
}