public DomainGroup addOrUpdateDomainString(String action, String domainList,String searchList, DomainGroup domainGroups) {
List<Domain> domains = new ArrayList<Domain>();
List<Domain> searchDomains=new ArrayList<Domain>();
String domainGroupName=domainGroups.getDomainGroupName();
int domainGroupId=domainGroups.getDomainGroupId();
domains = uniqueDomain(domainList,1);
searchDomains=uniqueDomain(searchList,2);
DomainGroup domainGroup = new DomainGroup();
if (action == "add") {
domainGroup.setDomainGroupName(domainGroupName);
this.insertDomainGroup(domainGroup);
domainGroup = this.getDomainGroupByDomainGroupName(domainGroupName);
} else {
domainGroup = this.getDomainGroupByDomainGroupId(domainGroupId);
}
if (domainGroup != null) {
if(domainGroup.getDomains() != null)
processUpdateExistingDomain(domainGroup.getDomains(),domains);
System.out.println(domains.size());
processUpdateExistingDomain(domainGroup.getDomains(),searchDomains);
System.out.println(searchDomains.size());
domainGroup.setDomains(domains);
domainGroup.getDomains().addAll(searchDomains);
System.out.println(domainGroup.getDomains().size());
this.updateDomainGroup(domainGroup);
}
return domainGroup;
}
private List<Domain> uniqueDomain(String domainList,int searchType) {
List<Domain> domains = new ArrayList<Domain>();
List<Domain> existingList = this.getAllDomainsBySearchType(searchType);
List<Domain> newDomainList = new ArrayList<Domain>();
String[] domain_arr = domainList.split("/n");
for (String dword : domain_arr) {
boolean duplicate = false;
Domain domain = null;
dword = processKeyword(dword.trim());
for ( Domain d : existingList ){
if(d.getDomainName().equalsIgnoreCase(dword) && d.getSearchType()==searchType){
domain = d;
existingList.remove(d);
break;
}
}
if (domain == null && domains.size() > 0 ){
for (Domain d : domains) {
if (d.getDomainName().equalsIgnoreCase(dword)) {
domain = d;
break;
}
}
}
if ( domain == null){
domain = new Domain();
domain.setDomainName(dword);
domain.setSearchType(searchType);
if (newDomainList.size() == 0 ){
newDomainList.add(domain);
}else{
for (Domain d : newDomainList) {
if (d.getDomainName().equalsIgnoreCase(domain.getDomainName()) && d.getSearchType()==searchType) {
duplicate = true;
break;
}
}
if ( !duplicate )
newDomainList.add(domain);
}
}else{
if (domains.size() == 0 )
domains.add(domain);
else {
for (Domain d : domains) {
if (d.getDomainName().equalsIgnoreCase(domain.getDomainName()) && d.getSearchType()==searchType) {
duplicate = true;
break;
}
}
if ( !duplicate )
domains.add(domain);
}
}
}
if(newDomainList.size() > 0){
this.insertDomains(newDomainList);
domains.addAll(newDomainList);
}
return domains;
}
private void processUpdateExistingDomain(List<Domain> originalDomains, List<Domain> newDomains){
if(!(originalDomains==null)){
for(Domain newDomain : newDomains){
for(Domain originalDomain : originalDomains){
if (originalDomain.getDomainName().equalsIgnoreCase(newDomain.getDomainName())){
originalDomains.remove(originalDomain);
break;
}
}
}
}
}
private String processKeyword(String keyword){
return Pattern.compile("[///"']").matcher(keyword).replaceAll("");
}