Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 1&1 Internet AG, http://www.1and1.org
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation; either version 2 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 Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.sf.beezle.sushi.csv;
 
 
 import java.util.List;

Defines how to turn instances into csv an vice versa
  
 @Type public class View {
     public static View fromXml(Node srcthrows IOExceptionLoaderException {
         Schema metadata;
         
         metadata = new AnnotationSchema();
         metadata.add(new SimpleType(metadataPath.class"string") {
             @Override
             public Object newInstance() {
                 return "";
             }
             
             @Override
             public Object stringToValue(String str) {
                 return new Path(str);
             }
 
             @Override
             public String valueToString(Object value) {
                 return ((Pathvalue).getPath();
             }
         });
         return metadata.type(View.class).<View>loadXml(src).get();
     }
 
     @Value private Path scope;
     @Sequence(Field.classprivate final List<Fieldfields;
     
     public View() { // TODO
         this(new Path(""));
     }
 
     public View(Path scope) {
         this. = scope;
         this. = new ArrayList<Field>();
     }
 
     public Path getScope() {
         return ;
     }
     
     public void setScope(Path scope) {
         this. = scope;
     }
     
     public List<Fieldfields() {
         return ;
     }
     
     public void add(Field field) {
         if (lookup(field.getName()) != null) {
             throw new ViewException("duplicate field: " + field.getName());
         }
         .add(field);
     }
     
     public int size() {
         return .size();
     }
     
     public Field lookup(String name) {
         for (Field field : ) {
             if (field.getName().equals(name)) {
                return field;
            }
        }
        return null;
    }
    
    //--
    
    public void toCsv(Instance<?> srcCsv destString ... selected) {
        toCsv(srcdest, Arrays.asList(selected));
    }
    
    public void toCsv(Instance<?> srcCsv destList<Stringselected) {
        List<Stringkeys;
        String key;
        int idx;
        Instance<?>[] found;
        
        found = new Instance<?>[selected.size()];
        for (Instance<?> value : .select(src)) {
            keys = .get(0).get(value);
            if (keys.size() == 1) {
                key = keys.get(0);                
                idx = selected.indexOf(key);
                if (idx != -1) {
                    if (found[idx] != null) {
                        throw new IllegalArgumentException("duplicate key: " + key);
                    }
                    found[idx] = value;
                }
            }
        }
        dest.add(header());
        for (int i = 0; i < found.lengthi++) {
            if (found[i] == null) {
                throw new IllegalArgumentException("key not found: " + selected.get(i));
            }
            toCsv(found[i], dest);
        }
    }
    public void toCsv(Instance<?> valueCsv dest) {
        Line line;
        List<Stringstrings;
        
        line = new Line();
        for (Field field : ) {
            strings = field.get(value);
            if (strings == null) {
                line.addNull();
            } else {
                line.add().addAll(strings);
            }
        }
        dest.add(line);
    }
    public void fromCsv(Csv srcInstance<?> destthrows SimpleTypeException {
        List<Fieldheader;
    
        header = null;
        for (Line line : src) {
            if (header == null) {
                // don't care wether about line.isComment
                header = parseHeader(line);
            } else {
                setLine(headerlinedest);
            }
        }
    }
    
    public void setLine(List<FieldheaderLine lineInstance<?> destthrows SimpleTypeException {
        int size;
        Instance<?> selected;
        
        size = line.size();
        if (size != header.size()) {
            throw new ViewException("column mismatch: expected " + header.size() + ", got " + size);
        }
        for (String id : line.get(0)) {
            selected = find(.select(dest), header.get(0).getPath(), id);
            for (int i = 1; i < sizei++) {
                header.get(i).set(selectedline.get(i));
            }
        }
    }
    
    private Instance<?> find(List<Instance<?>> allPath pathString value) {
        for (Instance<?> i : all) {
            if (value.equals(path.selectOne(i).valueToString())) {
                return i;
            }
        }
        throw new ViewException("no such value: " + value);
    }
    
    //--
    
    private Line header() {
        Line line;
        
        line = new Line();
        for (Field field : ) {
            line.addOne(field.getName());
        }
        return line;
    }
    private List<FieldparseHeader(Line line) {
        List<Fieldresult;
        Field field;
        String name;
        
        result = new ArrayList<Field>();
        for (int i = 0, max = line.size(); i < maxi++) {
            name = line.getOne(i);
            field = lookup(name);
            if (field == null) {
                throw new ViewException("unknown field in header: '" + name + "'");
            }
            result.add(field);
        }
        return result;
    }
New to GrepCode? Check out our FAQ X