package org.witness.informacam.models.organizations;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.NoSuchElementException;
import org.witness.informacam.InformaCam;
import org.witness.informacam.R;
import org.witness.informacam.models.Model;
import org.witness.informacam.models.forms.IForm;
import org.witness.informacam.ui.popups.YesNoPopup;
import org.witness.informacam.utils.Constants.Logger;
import org.witness.informacam.utils.Constants.Models;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Typeface;
import android.view.View;
import android.widget.TextView;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
public class IInstalledOrganizations extends Model {
public List<IOrganization> organizations = new ArrayList<IOrganization>();
public List<IOrganization> listOrganizations() {
return organizations;
}
public IOrganization getByName(final String organizationName) {
Collection<IOrganization> organizations_ = Collections2.filter(organizations, new Predicate<IOrganization>() {
@Override
public boolean apply(IOrganization o) {
return o.organizationName.equals(organizationName);
}
});
try {
return organizations_.iterator().next();
} catch(NullPointerException e) {
return null;
} catch(NoSuchElementException e) {
return null;
}
}
@SuppressLint("DefaultLocale")
public IOrganization getByFingerprint(final String fingerprint) {
Collection<IOrganization> organizations_ = Collections2.filter(organizations, new Predicate<IOrganization>() {
@Override
public boolean apply(IOrganization o) {
return o.organizationFingerprint.toLowerCase().equals(fingerprint.toLowerCase());
}
});
try {
return organizations_.iterator().next();
} catch(NullPointerException e) {
return null;
} catch(NoSuchElementException e) {
return null;
}
}
public void save() {
InformaCam.getInstance().saveState(this);
}
public void addOrganization(final IOrganization organization, Context a) {
final IOrganization possibleDuplicate = getByFingerprint(organization.organizationFingerprint);
if(possibleDuplicate == null) {
organizations.add(organization);
save();
} else {
boolean isActuallyDifferent = false;
StringBuffer sb = new StringBuffer();
ArrayList<View> infoViews = new ArrayList<View>();
sb.append(a.getString(R.string.an_ictd_for_x_already, organization.organizationName));
sb.append("\n\n" + a.getString(R.string.heres_whats_changed) + "\n");
TextView warning = new TextView(a);
warning.setText(sb.toString());
infoViews.add(warning);
Logger.d(LOG, "OLD REPO:\n" + possibleDuplicate.asJson().toString());
Logger.d(LOG, "NEW REPO:\n" + organization.asJson().toString());
if(!possibleDuplicate.organizationDetails.equals(organization.organizationDetails)) {
TextView orgDetails = new TextView(a);
orgDetails.setText(Models.IOrganization.ORGANIZATION_DETAILS + ":");
orgDetails.setTypeface(null, Typeface.BOLD);
TextView orgDetails_ = new TextView(a);
sb = new StringBuffer();
sb.append(a.getString(R.string.old_version) + ": " + possibleDuplicate.organizationDetails + "\n");
sb.append(a.getString(R.string.new_version) + ": " + organization.organizationDetails + "\n");
orgDetails_.setText(sb.toString());
infoViews.add(orgDetails);
infoViews.add(orgDetails_);
if(!isActuallyDifferent) {
isActuallyDifferent = true;
}
}
if(!possibleDuplicate.organizationName.equals(organization.organizationName)) {
TextView orgDetails = new TextView(a);
orgDetails.setText(Models.IOrganization.ORGANIZATION_NAME + ":");
orgDetails.setTypeface(null, Typeface.BOLD);
TextView orgDetails_ = new TextView(a);
sb = new StringBuffer();
sb.append(a.getString(R.string.old_version) + ": " + possibleDuplicate.organizationName + "\n");
sb.append(a.getString(R.string.new_version) + ": " + organization.organizationName + "\n");
orgDetails_.setText(sb.toString());
infoViews.add(orgDetails);
infoViews.add(orgDetails_);
if(!isActuallyDifferent) {
isActuallyDifferent = true;
}
}
if(possibleDuplicate.repositories != organization.repositories) {
TextView orgDetails = new TextView(a);
orgDetails.setText(Models.IOrganization.REPOSITORIES + ":");
orgDetails.setTypeface(null, Typeface.BOLD);
TextView orgDetails_ = new TextView(a);
sb = new StringBuffer();
sb.append(a.getString(R.string.old_version) + ":\n");
for(IRepository r : possibleDuplicate.repositories) {
sb.append(r.source + " : " + r.asset_root + "/" + r.asset_id + "\n");
}
sb.append("\n");
sb.append(a.getString(R.string.new_version) + ":\n");
for(IRepository r : organization.repositories) {
sb.append(r.source + " : " + r.asset_root + "/" + r.asset_id + "\n");
}
orgDetails_.setText(sb.toString());
infoViews.add(orgDetails);
infoViews.add(orgDetails_);
if(!isActuallyDifferent) {
isActuallyDifferent = true;
}
}
if(possibleDuplicate.forms != organization.forms) {
TextView orgDetails = new TextView(a);
orgDetails.setText(Models.IOrganization.FORMS + ":");
orgDetails.setTypeface(null, Typeface.BOLD);
TextView orgDetails_ = new TextView(a);
sb = new StringBuffer();
sb.append(a.getString(R.string.old_version) + ":\n");
for(IForm f : possibleDuplicate.forms) {
sb.append(f.title + "\n");
}
sb.append("\n");
sb.append(a.getString(R.string.new_version) + ":\n");
for(IForm f : organization.forms) {
sb.append(f.title + "\n");
}
orgDetails_.setText(sb.toString());
infoViews.add(orgDetails);
infoViews.add(orgDetails_);
if(!isActuallyDifferent) {
isActuallyDifferent = true;
}
}
if(!isActuallyDifferent) {
TextView orgDetails = new TextView(a);
orgDetails.setText(a.getString(R.string.this_ictd_has_not_changed));
infoViews.add(orgDetails);
}
/*
@SuppressWarnings("unused")
YesNoPopup updateICTDPopup = new YesNoPopup(a, infoViews) {
@Override
public void onClick(View v) {
if(v == ok) {
try
{
possibleDuplicate.inflate(organization);
save();
}
catch (Exception e)
{
Logger.e(LOG, e);
}
}
cancel();
}
};*/
}
Logger.d(LOG, String.format("Installed Organizatins: %d", organizations.size()));
}
}