private static void updateLocationProxy(
     StationElementProxy destination, StationElementProxy source) {
   if (destination.getLocation() == null && source.getLocation() == null) return;
   else if (destination.getLocation() == null) {
     destination.setLocation(source.getLocation());
     if (destination.getModel().getRowGuid() == null) destination.getModel().setRowGuid();
     destination.getLocation().getModel().setName(destination.getModel().getRowGuid());
   } else if (source.getLocation() == null) {
     destination.setLocation(null);
   } else {
     destination.getLocation().setCoordinates(source.getLocation().getCoordinates());
   }
 }
 /**
  * Builds a ViewModel from the provided proxy note: uses the first location in the proxy's
  * locations as the location
  *
  * @param proxy
  * @return the generated ViewModel or null if the proxy, or the proxy's model's element is null
  */
 public static CategoryElementsListAdapter.ViewModel convertToViewModel(
     StationElementProxy proxy) {
   if (proxy == null || proxy.getModel() == null) return null;
   CategoryElementsListAdapter.ViewModel vm = convertToViewModel(proxy.getModel().getElement());
   if (vm == null) return null;
   DescriptorServices.getByFieldDescriptor(vm, proxy.getModel());
   if (proxy.getModel().hasMetaData())
     MetaDataService.updateAnnotations(vm, proxy.getModel().getMetaData());
   if (proxy.getLocation() != null && proxy.getLocation().getLocations().size() > 0)
     vm.location = proxy.getLocation().getLocations().get(0);
   if (proxy.getPhotos() != null && proxy.getPhotos().size() > 0)
     vm.photos = PhotoService.convertProxiesToFilePathArray(proxy.getPhotos());
   return vm;
 }
 public static StationElementProxy convertToProxy(
     CategoryElementsListAdapter.ViewModel viewModel) {
   StationElementProxy proxy = new StationElementProxy();
   StationElement se = new StationElement();
   Element element = new Element();
   DescriptorServices.setByFieldDescriptor(viewModel, element);
   DescriptorServices.setByFieldDescriptor(viewModel, se);
   List<StationElementMeta> metaElements = MetaDataService.fromAnnotations(viewModel, true);
   if (metaElements != null && metaElements.size() > 0) se.setMetaData(metaElements);
   se.setElement(element);
   proxy.setModel(se);
   if (viewModel.location != null) {
     Location l = new Location();
     if (proxy.getModel().getRowGuid() == null) proxy.getModel().setRowGuid();
     l.setName(proxy.getModel().getRowGuid());
     LocationProxy lp = LocationService.createPointFromLocation(viewModel.location, l);
     proxy.setLocation(lp);
   }
   return proxy;
 }
 public static void addPhotoProxy(
     VegetationSurveyProxy proxy,
     PhotoProxy photoProxy,
     CategoryElementsListAdapter.ViewModel viewModel) {
   for (StationElementProxy seProxy : proxy.getStationElements()) {
     if (seProxy.getModel().getElement().getId() == viewModel.getElementId()) {
       if (seProxy.getPhotos() == null) seProxy.setPhotos(new ArrayList<PhotoProxy>());
       seProxy.getPhotos().add(photoProxy);
     }
   }
 }
 public static void updateFromViewModels(
     ArrayList<CategoryElementsListAdapter.ViewModel> viewModels,
     List<StationElementProxy> proxies) {
   StationElementProxy.StationElementProxyByRowGuidComparator comparator =
       new StationElementProxy.StationElementProxyByRowGuidComparator();
   List<StationElementProxy> fromVM = CategorySurveyService.convertToProxies(viewModels);
   List<StationElementProxy> forDelete = CollectionOperations.except(proxies, fromVM, comparator);
   if (forDelete != null && forDelete.size() > 0)
     CollectionOperations.removeAll(proxies, forDelete, comparator);
   // PhotoService photoService = new PhotoService(SageApplication.getInstance().getDaoSession());
   for (StationElementProxy proxy : proxies) { // TODO: investigate moving to ElementService
     StationElementProxy temp = CollectionOperations.find(fromVM, proxy, comparator);
     proxy.getModel().setCount(temp.getModel().getCount());
     MetaDataService.MetaSupportExtensionMethods.replace(proxy.getModel(), temp.getModel());
     updateLocationProxy(proxy, temp);
     // TODO: deal with photos
     temp.setPhotos(proxy.getPhotos());
     // List<Photo> photos = photoService.find(proxy.getModel());
     // if(photos != null && photos.size() > 0) proxy.setPhotos(PhotoService.convertToProxy(photos,
     // proxy.getModel()));
   }
 }