package farom.iparcos.catalog; import android.content.Context; import android.content.res.Resources; import android.text.Html; import android.text.Spannable; import android.text.SpannableString; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import farom.iparcos.R; /** * A star */ public class StarEntry extends CatalogEntry { private final static int resource = R.raw.stars; private final static int entryLength = 120; private final static int nameLength = 22; private final static int namesLength = 64; private final static int raLength = 12; private final static int deLength = 12; private final static int magnitudeLength = 7; protected String names; protected String magnitude; /** * Create the entry from a formatted line * (ie. "ALGOL ALGOL; BET PER; HD19356; SAO38592 03 08 10.131 +40 57 20.43 2.1") * * @param buf formatted line */ public StarEntry(char[] buf) { String data = String.valueOf(buf); int i = 0; name = data.substring(i, i + nameLength).trim(); i += nameLength; names = data.substring(i, i + namesLength).trim(); i += namesLength; String ra_str = data.substring(i, i + raLength).trim(); i += raLength+1; String de_str = data.substring(i, i + deLength).trim(); i += deLength+1; coord = new Coordinates(ra_str,de_str); magnitude = data.substring(i, i + magnitudeLength).trim(); } /** * Create the description rich-text string * * @param ctx Context (to access resource strings) * @return description Spannable */ @Override public Spannable createDescription(Context ctx) { Resources r = ctx.getResources(); String str = "<b>" + r.getString(R.string.entry_names) + r.getString(R.string.colon_with_spaces) + "</b>" + names + "<br/>"; str += "<b>" + r.getString(R.string.entry_type) + r.getString(R.string.colon_with_spaces) + "</b>" + r.getString(R.string.entry_star) + "<br/>"; str += "<b>" + r.getString(R.string.entry_magnitude) + r.getString(R.string.colon_with_spaces) + "</b>" + magnitude + "<br/>"; str += "<b>" + r.getString(R.string.entry_RA) + r.getString(R.string.colon_with_spaces) + "</b>" + coord.getRaStr() + "<br/>"; str += "<b>" + r.getString(R.string.entry_DE) + r.getString(R.string.colon_with_spaces) + "</b>" + coord.getDeStr(); return new SpannableString(Html.fromHtml(str)); } /** * Create the summary rich-text string (1 line) * * @param ctx Context (to access resource strings) * @return summary Spannable */ @Override public Spannable createSummary(Context ctx) { Resources r = ctx.getResources(); String str = "<b>" + r.getString(R.string.entry_star) + "</b> " + r.getString(R.string.entry_mag) + "=" + magnitude; return new SpannableString(Html.fromHtml(str)); } /** * Create the list of star entries * * @param context Context to access the catalog file * @return A list of stars */ public static ArrayList<StarEntry> createList(Context context) { ArrayList<StarEntry> entries = new ArrayList<StarEntry>(); // Open and read the catalog file try { final Resources resources = context.getResources(); InputStream inputStream = resources.openRawResource(resource); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream), entryLength); char[] buf = new char[entryLength]; while (reader.read(buf, 0, entryLength) > 0) { entries.add(new StarEntry(buf)); } inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return entries; } }