Android Open Source - opentraining Workout X M L Parser






From Project

Back to project page opentraining.

License

The source code is released under:

GNU General Public License

If you think the Android project opentraining listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * //  www .  j  av a2s . c  o m
 * This is OpenTraining, an Android application for planning your your fitness training.
 * Copyright (C) 2012-2014 Christian Skubich
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 */

package de.skubware.opentraining.db.parser;

import javax.xml.parsers.*;

import org.xml.sax.*;
import org.xml.sax.helpers.*;

import android.content.Context;
import android.util.Log;

import de.skubware.opentraining.basic.*;
import de.skubware.opentraining.basic.ExerciseType.ExerciseSource;
import de.skubware.opentraining.basic.FSet.SetParameter;
import de.skubware.opentraining.db.DataProvider;
import de.skubware.opentraining.db.IDataProvider;

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * An implementation of a SaxParser for parsing .xml files to a {@link Workout}
 * object.
 * 
 * @author Christian Skubich
 */
public class WorkoutXMLParser extends DefaultHandler {
  /** Tag for logging */
  static final String TAG = "WorkoutXMLParser";

  private Context mContext;

  private SAXParser mParser = null;

  private Workout mWorkout;

  // Workout stuff
  /** Name of the {@link Workout} */
  private String mWorkoutName;

  /** Integer for the number of rows of the workout. */
  private Integer mRowCount;

  // FitnessExercise stuff
  /** List to store the {@link FitnessExercise}s */
  private List<FitnessExercise> mFExList = new ArrayList<FitnessExercise>();

  /** The last {@link ExerciseType} that was parsed */
  private ExerciseType mExerciseType;

  /** The custom name of the {@link FitnessExercise} */
  private String mCustomName;

  // TrainingEntry stuff
  /** A Map for the TrainingEntrys of a FitnessExercise. */
  private List<TrainingEntry> mTrainingEntryList = new ArrayList<TrainingEntry>();

  /** Date for the last parsed {@link TrainingEntry} */
  private TrainingEntry mTrainingEntry;

  // FSet stuff
  /** List for the {@link FSet}s */
  private List<FSet> mFSetList = new ArrayList<FSet>();

  /** List for the {@link FSet}s of the TrainingEntry */
  private List<FSet> mTrainingEntryFSetList = new ArrayList<FSet>();

  /** Map for the status of the FSets. */
  private Map<FSet,Boolean> mSetHasBeenDoneMap = new HashMap<FSet,Boolean>();
  
  /** The status of the FSet */
  private boolean mSetHasBeenDone = true;
  
  private boolean parsingTrainingEntry = false;

  /** List of the {@link SetParameter}s */
  private List<SetParameter> mSetParameter = new ArrayList<SetParameter>();

  /** Name of the last parsed {@link SetParameter} */
  private String mSetParameterName;

  /** Value of the last parsed {@link SetParameter} */
  private String mSetParameterValue;

  public WorkoutXMLParser() {
    // IParser instanziieren
    try {
      SAXParserFactory fac = SAXParserFactory.newInstance();
      mParser = fac.newSAXParser();
    } catch (Exception e) {
      e.printStackTrace();
    }

  }

  public Workout read(File f, Context context) {
    mContext = context;

    try {
      // Dokument parsen
      mParser.parse(f, this);

      return this.mWorkout;
    } catch (SAXException e) {
      String workoutString = "";
      try {
        BufferedReader br = new BufferedReader(new FileReader(f));
        String line;
        StringBuilder sb = new StringBuilder();
        
        while((line=br.readLine())!= null){
            sb.append(line.trim());
        }
        workoutString = sb.toString();
      } catch (IOException ioEx) {
        Log.e(TAG, "Error during reading Workout file.", ioEx);
      }
      
      Log.e(TAG, "Error during parsing Workout. Workout file: \n " + workoutString, e);
    } catch (Exception e) {
      Log.e(TAG, "Error during parsing Workout.", e);
    }

    return null;
  }

  @SuppressWarnings("deprecation")
  // because using constructor of TrainingEntry
  @Override
  public void startElement(String uri, String name, String qname, Attributes attributes) throws SAXException {
    if (qname.equals("Workout")) {
      mWorkoutName = attributes.getValue("name");
      String r = attributes.getValue("rows");
      if (r != null) {
        this.mRowCount = Integer.parseInt(r);
      }
    }
    if (qname.equals("FitnessExercise")) {
      this.mCustomName = attributes.getValue("customname");
    }
    if (qname.equals("ExerciseType")) {
      String exName = attributes.getValue("name");
      IDataProvider dataProvider = new DataProvider(mContext);
      this.mExerciseType = dataProvider.getExerciseByName(exName);
      
      // if exercise can't be found, create and save it
      // this may happen if a custom(or synced) exercise has been deleted
      if (mExerciseType == null) {
        Log.e(TAG, "Could not find exercise, will create new custom exercise with the name " + exName, new NullPointerException("The exercise '" + exName + "' of the TrainingPlan couldn't be found in the database."));
        mExerciseType = (new ExerciseType.Builder(exName, ExerciseSource.CUSTOM)).build();
        dataProvider.saveCustomExercise(mExerciseType);
      }
    }
    if(qname.equals("FSet")){
      if(attributes.getValue("hasBeenDone") != null)
        mSetHasBeenDone = Boolean.parseBoolean(attributes.getValue("hasBeenDone"));
    }
    // start of FSet can be ignored
    if (qname.equals("SetParameter")) {
      this.mSetParameterName = attributes.getValue("name");
      this.mSetParameterValue = attributes.getValue("value");
    }
    if (qname.equals("TrainingEntry")) {
      parsingTrainingEntry = true;
      String dateString = attributes.getValue("date");

      Date trainingEntryDate;
      if (dateString == null || dateString.equals("") || dateString.equals("null")) {
        trainingEntryDate = null;
      } else {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");

        try {
          trainingEntryDate = format.parse(dateString);
        } catch (ParseException e) {
          Log.e(TAG, "Error parsing date: " + dateString, e);
          trainingEntryDate = null;
        }
      }

      this.mTrainingEntry = new TrainingEntry(trainingEntryDate);

    }

  }

  @Override
  public void endElement(String uri, String localName, String qName) {
    if (qName.equals("Workout")) {
      this.mWorkout = new Workout(this.mWorkoutName, this.mFExList.toArray(new FitnessExercise[0]));
      if (this.mRowCount != null) {
        this.mWorkout.setEmptyRows(this.mRowCount);
      } else {
        Log.d(TAG, "No rows were set");
      }

      this.mRowCount = null;
      this.mWorkoutName = null;
    }
    if (qName.equals("FitnessExercise")) {
      FitnessExercise fEx = new FitnessExercise(this.mExerciseType, this.mFSetList.toArray(new FSet[0]));

      // set custom name
      if (this.mCustomName != null) {
        fEx.setCustomName(mCustomName);
        Log.d(TAG, "customName=" + mCustomName);
      } else {
        Log.d(TAG, "No customName");
      }

      // now add TrainingEntrys
      List<TrainingEntry> originalList = fEx.getTrainingEntryList();
      originalList.addAll(this.mTrainingEntryList);

      this.mFExList.add(fEx);

      this.mCustomName = null;
      this.mExerciseType = null;
      this.mFSetList = new ArrayList<FSet>();
      this.mTrainingEntryList = new ArrayList<TrainingEntry>();

    }
    if (qName.equals("FSet")) {
      FSet createdFSet = new FSet(this.mSetParameter.toArray(new SetParameter[1]));
      if (parsingTrainingEntry) {
        if (!mSetParameter.isEmpty()) {
          mTrainingEntryFSetList.add(createdFSet);
        }
      } else {
        if (!mSetParameter.isEmpty()) {
          mFSetList.add(createdFSet);
        }
      }

      this.mSetHasBeenDoneMap.put(createdFSet, mSetHasBeenDone);
      this.mSetHasBeenDone = true;
      this.mSetParameter = new ArrayList<SetParameter>();
    }
    if (qName.equals("SetParameter")) {
      boolean created = false;
      if (this.mSetParameterName.equals(new SetParameter.Weight(1).getName())) {
        this.mSetParameter.add(new SetParameter.Weight(Integer.parseInt(this.mSetParameterValue)));
        created = true;
      }
      if (this.mSetParameterName.equals(new SetParameter.Repetition(1).getName())) {
        this.mSetParameter.add(new SetParameter.Repetition(Integer.parseInt(this.mSetParameterValue)));
        created = true;
      }
      if (this.mSetParameterName.equals(new SetParameter.Duration(1).getName())) {
        this.mSetParameter.add(new SetParameter.Duration(Integer.parseInt(this.mSetParameterValue)));
        created = true;
      }
      if (this.mSetParameterName.equals(new SetParameter.FreeField(" ").getName())) {
        this.mSetParameter.add(new SetParameter.FreeField(this.mSetParameterValue));
        created = true;
      }
      if (!created) {
        throw new IllegalStateException();
      }
      mSetParameterName = null;
      mSetParameterValue = null;
    }
    if (qName.equals("TrainingEntry")) {
      for (FSet set : this.mTrainingEntryFSetList) {
        mTrainingEntry.add(set);
        mTrainingEntry.setHasBeenDone(set, mSetHasBeenDoneMap.get(set));
      }

      this.mTrainingEntryList.add(this.mTrainingEntry);
      this.mTrainingEntry = null;
      this.mTrainingEntryFSetList = new ArrayList<FSet>();
      this.mSetHasBeenDoneMap = new HashMap<FSet,Boolean>();
      parsingTrainingEntry = false;
    }
    if (qName.equals("TrainingSubEntry")) {
      // to nothing
    }

  }
}




Java Source Code List

at.technikum.mti.fancycoverflow.FancyCoverFlowAdapter.java
at.technikum.mti.fancycoverflow.FancyCoverFlowItemWrapper.java
at.technikum.mti.fancycoverflow.FancyCoverFlow.java
de.skubware.opentraining.activity.ChangeLogDialog.java
de.skubware.opentraining.activity.DisclaimerDialog.java
de.skubware.opentraining.activity.MainActivity.java
de.skubware.opentraining.activity.NavigationGalleryAdapter.java
de.skubware.opentraining.activity.SelectWorkoutDialogFragment.java
de.skubware.opentraining.activity.WhatsNewDialog.java
de.skubware.opentraining.activity.acra.ACRACrashReportMailer.java
de.skubware.opentraining.activity.acra.ACRAFeedbackMailer.java
de.skubware.opentraining.activity.acra.OpenTrainingApplication.java
de.skubware.opentraining.activity.acra.RequestExerciseUpdate.java
de.skubware.opentraining.activity.create_exercise.CreateExerciseActivity.java
de.skubware.opentraining.activity.create_exercise.CustomSpinner.java
de.skubware.opentraining.activity.create_exercise.DescriptionFragment.java
de.skubware.opentraining.activity.create_exercise.EditImageMetadataDialog.java
de.skubware.opentraining.activity.create_exercise.EquipmentDataFragment.java
de.skubware.opentraining.activity.create_exercise.ExerciseImageListAdapter.java
de.skubware.opentraining.activity.create_exercise.ImageFragment.java
de.skubware.opentraining.activity.create_exercise.MuscleDataFragment.java
de.skubware.opentraining.activity.create_exercise.NameFragment.java
de.skubware.opentraining.activity.create_exercise.SimpleDataFragment.java
de.skubware.opentraining.activity.create_exercise.SpinnerDataFragment.java
de.skubware.opentraining.activity.create_workout.DialogFilterMusclesAndEquipment.java
de.skubware.opentraining.activity.create_workout.DialogWorkoutOverviewFragment.java
de.skubware.opentraining.activity.create_workout.ExerciseDetailOnGestureListener.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeDetailActivity.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeDetailFragment.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeListActivity.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeListAdapter.java
de.skubware.opentraining.activity.create_workout.ExerciseTypeListFragment.java
de.skubware.opentraining.activity.create_workout.SelectMuscleDialog.java
de.skubware.opentraining.activity.create_workout.SendExerciseFeedbackDialogFragment.java
de.skubware.opentraining.activity.create_workout.upload_exercise.ExerciseImage.java
de.skubware.opentraining.activity.create_workout.upload_exercise.UploadExerciseAsyncTask.java
de.skubware.opentraining.activity.create_workout.upload_exercise.UploadExerciseImagesAsyncTask.java
de.skubware.opentraining.activity.create_workout.upload_exercise.WgerRestService.java
de.skubware.opentraining.activity.manage_workouts.RenameWorkoutDialogFragment.java
de.skubware.opentraining.activity.manage_workouts.WorkoutDetailActivity.java
de.skubware.opentraining.activity.manage_workouts.WorkoutDetailFragment.java
de.skubware.opentraining.activity.manage_workouts.WorkoutListActivity.java
de.skubware.opentraining.activity.manage_workouts.WorkoutListFragment.java
de.skubware.opentraining.activity.settings.LicenseDialog.java
de.skubware.opentraining.activity.settings.SettingsActivity.java
de.skubware.opentraining.activity.settings.sync.OpenTrainingSyncResultReceiver.java
de.skubware.opentraining.activity.settings.sync.OpenTrainingSyncService.java
de.skubware.opentraining.activity.settings.sync.RestClient.java
de.skubware.opentraining.activity.settings.sync.SyncFinishedDialog.java
de.skubware.opentraining.activity.settings.sync.WgerImageDownloader.java
de.skubware.opentraining.activity.settings.sync.WgerJSONParser.java
de.skubware.opentraining.activity.start_training.DialogFragmentAddEntry.java
de.skubware.opentraining.activity.start_training.DialogFragmentTrainingEntryTable.java
de.skubware.opentraining.activity.start_training.FExDetailActivity.java
de.skubware.opentraining.activity.start_training.FExDetailFragment.java
de.skubware.opentraining.activity.start_training.FExListActivity.java
de.skubware.opentraining.activity.start_training.FExListAdapter.java
de.skubware.opentraining.activity.start_training.FExListFragment.java
de.skubware.opentraining.activity.start_training.RecoveryTimerManager.java
de.skubware.opentraining.activity.start_training.SwipeDismissListViewTouchListener.java
de.skubware.opentraining.activity.start_training.SwipeDismissTouchListener.java
de.skubware.opentraining.activity.start_training.TrainingEntryListAdapter.java
de.skubware.opentraining.basic.ActivationLevel.java
de.skubware.opentraining.basic.ExerciseTag.java
de.skubware.opentraining.basic.ExerciseType.java
de.skubware.opentraining.basic.FSet.java
de.skubware.opentraining.basic.FitnessExercise.java
de.skubware.opentraining.basic.IExercise.java
de.skubware.opentraining.basic.License.java
de.skubware.opentraining.basic.Muscle.java
de.skubware.opentraining.basic.SportsEquipment.java
de.skubware.opentraining.basic.TrainingEntry.java
de.skubware.opentraining.basic.Translatable.java
de.skubware.opentraining.basic.Workout.java
de.skubware.opentraining.db.Cache.java
de.skubware.opentraining.db.DataHelper.java
de.skubware.opentraining.db.DataProvider.java
de.skubware.opentraining.db.IDataProvider.java
de.skubware.opentraining.db.parser.AbstractJSONParser.java
de.skubware.opentraining.db.parser.ExerciseTagJSONParser.java
de.skubware.opentraining.db.parser.ExerciseTypeXMLParser.java
de.skubware.opentraining.db.parser.IParser.java
de.skubware.opentraining.db.parser.MuscleJSONParser.java
de.skubware.opentraining.db.parser.SportsEquipmentJSONParser.java
de.skubware.opentraining.db.parser.WorkoutXMLParser.java
de.skubware.opentraining.db.parser.XMLSaver.java
de.skubware.opentraining.db.rest.ExerciseImageGSONSerializer.java
de.skubware.opentraining.db.rest.ExerciseTypeGSONSerializer.java
de.skubware.opentraining.db.rest.LanguageGSONDeserializer.java
de.skubware.opentraining.db.rest.MuscleGSONDeserializer.java
de.skubware.opentraining.db.rest.ServerModel.java
de.skubware.opentraining.db.rest.SportsEquipmentGSONDeserializer.java
de.skubware.opentraining.exporter.HTMLExporter.java
de.skubware.opentraining.exporter.LaTeXExporter.java
de.skubware.opentraining.exporter.WorkoutExporter.java