package nz.co.android.cowseye.event; import java.net.URI; import java.util.List; import nz.co.android.cowseye.RiverWatchApplication; import com.google.android.maps.GeoPoint; import android.net.Uri; /** * A class to help build a submission event * @author Mitchell Lane * */ public class SubmissionEventBuilder { private static SubmissionEvent submissionEvent; private static SubmissionEventBuilder builder = null; private static RiverWatchApplication myApplication; /** Singleton */ public static SubmissionEventBuilder getSubmissionEventBuilder(RiverWatchApplication myApplication){ SubmissionEventBuilder.myApplication = myApplication; if(builder == null ) builder = new SubmissionEventBuilder(); return builder; } private SubmissionEventBuilder(){ submissionEvent = new SubmissionEvent(myApplication); } public void startNewSubmissionEvent(){ submissionEvent = new SubmissionEvent(myApplication); } public SubmissionEventBuilder setImagePath(Uri uri) { submissionEvent.setImagePath(uri); return this; } public SubmissionEventBuilder setImageTag (List <String> tag) { submissionEvent.setImageTag(tag); return this; } public SubmissionEventBuilder setImageDescription (String descr) { submissionEvent.setImageDescription(descr); return this; } public SubmissionEventBuilder setGeoCoordinates(GeoPoint addressCoordinates) { submissionEvent.setGeoCoordinates(addressCoordinates); return this; } public SubmissionEventBuilder setAddress(String address) { submissionEvent.setAddress(address); return this; } public SubmissionEventBuilder setFromGallery(boolean b) { submissionEvent.setFromGallery(b); return this; } public boolean isFromGallery() { return submissionEvent.isFromGallery(); } public Uri getImagePath(){ return submissionEvent.getImagePath(); } public String getImageDescription(){ return submissionEvent.getImageDescription(); } public List<String> getImageTag(){ return submissionEvent.getImageTag(); } public GeoPoint getGeoCoordinates(){ return submissionEvent.getGeoCoordinates(); } public String getAddress(){ return submissionEvent.getAddress(); } /** Tries to return a built submissionEvent */ public SubmissionEvent build() throws SubmissionEventBuilderException{ if(hasDetails()) return submissionEvent; else throw new SubmissionEventBuilderException("Submission Event does not contain all information needed"); } /* Checks if all valid details are stored */ private boolean hasDetails() { if(submissionEvent==null) return false; if(submissionEvent.getImagePath()==null) return false; if(submissionEvent.getImagePath().toString().equals("")) return false; if(submissionEvent.getImageDescription()==null) return false; if(submissionEvent.getImageDescription().equals("")) return false; //good if we have either geo coordinates or address return submissionEvent.getGeoCoordinates()!=null || (submissionEvent.getAddress()!=null && !submissionEvent.getAddress().equals("")) ; } }