Package

Source Code of Parser

import parser.BeanParser;

import java.io.*;
import java.lang.reflect.Field;
import java.util.*;

/**
* Date: 2010-11-08
*/
public class Parser {
    private Set parsers = new HashSet();
    private Class<?> clazz;
    private List<Field> afields;
    private List results = new ArrayList();

    public static void main(String[] args) {
        Parser parser = new Parser();
        parser.addBean(new SampleBean());
        long t = System.currentTimeMillis();
        List result = parser.parse("data/file.txt");
        System.out.println("t = " + (System.currentTimeMillis() - t) / 1000.0);
    }

    private void addBean(SampleBean sampleBean) {
        clazz = sampleBean.getClass();
        parsers.add(new BeanParser().decode(sampleBean.getClass()));
    }

    private List parse(String s) {
        File file = new File(s);
        try {
            BufferedReader reader = new BufferedReader(new FileReader(file));
            String line;
            BeanParser parser = (BeanParser) parsers.iterator().next();
            while ((line = reader.readLine()) != null) {
                List<Object> objects = parseLine(line, parser);
                Object bean = createBean(clazz);
                fillValues(bean, objects);
                results.add(bean);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace()//To change body of catch statement use File | Settings | File Templates.
        } catch (IOException e) {
            e.printStackTrace()//To change body of catch statement use File | Settings | File Templates.
        }
        return null//To change body of created methods use File | Settings | File Templates.
    }

    private void fillValues(Object bean, List<Object> objects) {
        List<Field> afields = getAnnotatedFields(clazz);
        for (int i = 0; i < afields.size(); i++) {
            try {
                afields.get(i).set(bean, objects.get(i));
            } catch (IllegalAccessException e) {
                e.printStackTrace()//To change body of catch statement use File | Settings | File Templates.
            }
        }
    }

    private List<Field> getAnnotatedFields(Class<?> clazz) {
        if (afields == null) {
            Field[] fields1 = clazz.getDeclaredFields();
            List<Field> fields = new ArrayList<Field>();
            for (Field f : fields1) {
                Parsed annotation = f.getAnnotation(Parsed.class);
                fields.add(f);
            }
            afields = fields;
        }
        return afields;  //To change body of created methods use File | Settings | File Templates.
    }

    private Object createBean(Class<?> clazz) {
        try {
            return clazz.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace()//To change body of catch statement use File | Settings | File Templates.
        } catch (IllegalAccessException e) {
            e.printStackTrace()//To change body of catch statement use File | Settings | File Templates.
        }
        return null;
    }

    private List<Object> parseLine(String line, BeanParser parser) {
        return parser.parse(line);
//                applyValues()
    }
}
TOP

Related Classes of Parser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.