Project: Book-Catalogue
/*
 * @copyright 2012 Philip Warner 
 * @license GNU General Public License 
 *  
 * This file is part of Book Catalogue. 
 * 
 * Book Catalogue 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. 
 * 
 * Book Catalogue 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 Book Catalogue.  If not, see <http://www.gnu.org/licenses/>. 
 */
 
package com.eleybourn.bookcatalogue.properties; 
 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
 
import com.eleybourn.bookcatalogue.BookCatalogueApp; 
import com.eleybourn.bookcatalogue.R; 
import com.eleybourn.bookcatalogue.ViewTagger; 
import com.eleybourn.bookcatalogue.properties.Property.StringValue; 
 
/**
 * Implement a String-based property with optional (non-empty) validation. 
 *  
 * @author Philip Warner 
 */
 
public class StringProperty extends ValuePropertyWithGlobalDefault<String> implements StringValue { 
 /** Flag indicating value must be non-blabnk */ 
 private boolean mRequireNonBlank = false
 
 public StringProperty(String uniqueId, PropertyGroup group, int nameResourceId, String value, String defaultPref, String defaultValue) { 
  super(uniqueId, group, nameResourceId, value, defaultPref, defaultValue); 
 
 public StringProperty(String uniqueId, PropertyGroup group, int nameResourceId, String defaultPref) { 
  super(uniqueId, group, nameResourceId, null, defaultPref, ""); 
 
 public StringProperty(String uniqueId, PropertyGroup group, int nameResourceId) { 
  super(uniqueId, group, nameResourceId, nullnull""); 
 
 
 /** Accessor */ 
 public void setRequireNonBlank(boolean requireNonBlank) { 
  mRequireNonBlank = requireNonBlank; 
 
 
 /** Accessor */ 
 public boolean getRequireNonBlank() { 
  return mRequireNonBlank; 
 
 
 /**
  * Build the editor for this property 
  */
 
 @Override 
 public View getView(LayoutInflater inflater) { 
  // Get base view and components. Tag them. 
  View v = inflater.inflate(R.layout.property_value_string, null); 
  ViewTagger.setTag(v, R.id.TAG_PROPERTY, this); 
  final TextView name = (TextView)v.findViewById(R.id.name); 
  final EditText value = (EditText)v.findViewById(R.id.value); 
 
  // Set the current values 
  name.setText(getName()); 
  value.setHint(getName()); 
  value.setText(get()); 
 
  // Reflect all changes in underlying data 
  value.addTextChangedListener(new TextWatcher(){ 
   @Override 
   public void afterTextChanged(Editable s) { 
    set(s.toString()); 
   
 
   @Override 
   public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 
 
   @Override 
   public void onTextChanged(CharSequence s, int start, int before, int count) { } 
  }); 
 
  return v; 
 
 
 /**
  * Get underlying preferences value 
  */
 
 @Override 
 protected String getGlobalDefault() { 
  return BookCatalogueApp.getAppPreferences().getString(getPreferenceKey(), getDefaultValue()); 
 
 /**
  * Set underlying preferences value 
  */
 
 @Override 
 protected void setGlobalDefault(String value) { 
  BookCatalogueApp.getAppPreferences().setString(getPreferenceKey(), value);    
 
 
 @Override 
 public void set(Property p) { 
  if (! (p instanceof StringValue) ) 
   throw new RuntimeException("Can not find a compatible interface for string parameter"); 
  StringValue bv = (StringValue) p; 
  set(bv.get()); 
 
 
 /**
  * Optional validator. 
  */
 
 @Override 
 public void validate() { 
  if (getRequireNonBlank()) { 
   String s = get(); 
   if (s == null || s.trim().equals("")) 
    throw new ValidationException(BookCatalogueApp.getResourceString(R.string.thing_must_not_be_blank, getName())); 
  
 
 
}