Search in sources :

Example 1 with BasicOpeningHourRule

use of net.osmand.util.OpeningHoursParser.BasicOpeningHourRule in project OsmAnd-tools by osmandapp.

the class AHSupermarketResolver method updateOSMFile.

// this file could be retrieved using xapi
// http://xapi.openstreetmap.org/api/0.6/*[shop=supermarket][bbox=2.5,50,7.8,53.5]
public void updateOSMFile(String pathToOsmFile, String pathToModifiedFile, boolean show) throws IOException, XMLStreamException, JSONException, XmlPullParserException {
    OsmBaseStorage storage = new OsmBaseStorage();
    final Map<String, EntityId> winkelNumbers = new LinkedHashMap<String, EntityId>();
    storage.getFilters().add(new IOsmStorageFilter() {

        @Override
        public boolean acceptEntityToLoad(OsmBaseStorage storage, EntityId entityId, Entity entity) {
            if (entity.getTag("winkelnummer") != null && entity.getTag("name").contains("eijn")) {
                winkelNumbers.put(entity.getTag("winkelnummer"), entityId);
                return true;
            }
            // register all nodes in order to operate with ways
            return true;
        }
    });
    storage.parseOSM(new FileInputStream(pathToOsmFile), new ConsoleProgressImplementation(2), null, true);
    Map<String, Map<String, Object>> supermarkets = getSupermarkets();
    DataTileManager<Entity> deleted = new DataTileManager<Entity>();
    for (String s : winkelNumbers.keySet()) {
        if (!supermarkets.containsKey(s)) {
            System.err.println("Shop " + s + " id=" + winkelNumbers.get(s) + " doesn't present on the site.");
            EntityId e = winkelNumbers.get(s);
            Entity en = storage.getRegisteredEntities().get(e);
            deleted.registerObject(en.getLatLon().getLatitude(), en.getLatLon().getLongitude(), en);
        }
    }
    DataTileManager<Entity> notCorrelated = new DataTileManager<Entity>();
    DataTileManager<Entity> notShown = new DataTileManager<Entity>();
    for (String s : supermarkets.keySet()) {
        Map<String, Object> props = supermarkets.get(s);
        if (winkelNumbers.get(s) != null) {
            EntityId id = winkelNumbers.get(s);
            Entity e = storage.getRegisteredEntities().get(id);
            EntityInfo info = storage.getRegisteredEntityInfo().get(id);
            Map<String, String> newTags = new LinkedHashMap<String, String>();
            String p = String.valueOf(props.get("format"));
            // IMPORTANT : comment what information should be updated or check
            String name = "Albert Heijn";
            if (!p.equals("AH")) {
                name += " " + p;
            }
            newTags.put("name", name);
            newTags.put("phone", String.valueOf(props.get("phone")));
            newTags.put("addr:city", String.valueOf(props.get("city")));
            newTags.put("addr:street", String.valueOf(props.get("street")));
            newTags.put("addr:housenumber", String.valueOf(props.get("housenr")));
            newTags.put("addr:postcode", String.valueOf(props.get("zip")));
            JSONArray o = (JSONArray) props.get("hours");
            OpeningHoursParser.OpeningHours rules = new OpeningHoursParser.OpeningHours();
            BasicOpeningHourRule prev = null;
            for (int i = 0; i < 7; i++) {
                JSONObject obj = o.getJSONObject(i);
                if (!obj.isNull("C") && obj.getBoolean("C")) {
                } else {
                    String opened = String.valueOf(obj.get("F"));
                    String closed = String.valueOf(obj.get("U"));
                    int start = Integer.parseInt(opened.substring(0, 2)) * 60 + Integer.parseInt(opened.substring(2));
                    int end = Integer.parseInt(closed.substring(0, 2)) * 60 + Integer.parseInt(closed.substring(2));
                    if (prev != null && prev.getStartTime() == start && prev.getEndTime() == end) {
                        prev.getDays()[i] = true;
                    } else {
                        BasicOpeningHourRule rule = new OpeningHoursParser.BasicOpeningHourRule();
                        rule.getDays()[i] = true;
                        rule.addTimeRange(start, end);
                        prev = rule;
                        rules.addRule(rule);
                    }
                }
            }
            newTags.put("opening_hours", rules.toString());
            // Check distance to info
            LatLon real = new LatLon((Double) props.get("lat"), (Double) props.get("lng"));
            double dist = MapUtils.getDistance(e.getLatLon(), real);
            if (dist > 150) {
                // TODO move shop ?
                System.err.println("Winkel number = " + s + " is too far from site info - " + dist + " m !!! " + real);
                if (dist > 300) {
                    notCorrelated.registerObject(real.getLatitude(), real.getLongitude(), e);
                }
            }
            boolean changed = false;
            for (String k : newTags.keySet()) {
                String val = newTags.get(k);
                if (!Algorithms.objectEquals(val, e.getTag(k))) {
                    e.putTag(k, val);
                    changed = true;
                }
            }
            if (changed) {
                info.setAction("modify");
            }
        } else {
            // TODO?
            LatLon real = new LatLon((Double) props.get("lat"), (Double) props.get("lng"));
            System.err.println("Winkel number = " + s + " is not found in database !!! " + real);
            Node n = new Node(real.getLatitude(), real.getLongitude(), -1);
            n.putTag("winkelnummer", "REG : " + s);
            notShown.registerObject(real.getLatitude(), real.getLongitude(), n);
        }
    }
    OsmStorageWriter writer = new OsmStorageWriter();
    writer.saveStorage(new FileOutputStream(pathToModifiedFile), storage, null, true);
    if (show) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        final MapPanel panel = new MapPanel(DataExtractionSettings.getSettings().getTilesDirectory());
        panel.setFocusable(true);
        MapPointsLayer toAdd = panel.getLayer(MapPointsLayer.class);
        toAdd.setPoints(notShown);
        toAdd.setPointSize(5);
        toAdd.setTagToShow("winkelnummer");
        MapPointsLayer red = new MapPointsLayer();
        red.setPoints(deleted);
        red.setColor(Color.red);
        red.setPointSize(5);
        panel.addLayer(red);
        MapPointsLayer blue = new MapPointsLayer();
        blue.setPoints(notCorrelated);
        blue.setColor(Color.blue);
        blue.setPointSize(4);
        panel.addLayer(blue);
        JFrame frame = new JFrame("Map view");
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                DataExtractionSettings settings = DataExtractionSettings.getSettings();
                settings.saveDefaultLocation(panel.getLatitude(), panel.getLongitude());
                settings.saveDefaultZoom(panel.getZoom());
                System.exit(0);
            }
        });
        Container content = frame.getContentPane();
        content.add(panel, BorderLayout.CENTER);
        JMenuBar bar = new JMenuBar();
        bar.add(MapPanel.getMenuToChooseSource(panel));
        frame.setJMenuBar(bar);
        frame.setSize(512, 512);
        frame.setVisible(true);
    }
}
Also used : OsmStorageWriter(net.osmand.osm.io.OsmStorageWriter) Entity(net.osmand.osm.edit.Entity) BasicOpeningHourRule(net.osmand.util.OpeningHoursParser.BasicOpeningHourRule) MapPanel(net.osmand.swing.MapPanel) Node(net.osmand.osm.edit.Node) WindowAdapter(java.awt.event.WindowAdapter) LinkedHashMap(java.util.LinkedHashMap) Container(java.awt.Container) DataTileManager(net.osmand.data.DataTileManager) JFrame(javax.swing.JFrame) IOsmStorageFilter(net.osmand.osm.io.IOsmStorageFilter) JSONArray(org.json.JSONArray) DataExtractionSettings(net.osmand.swing.DataExtractionSettings) ConsoleProgressImplementation(net.osmand.impl.ConsoleProgressImplementation) OpeningHoursParser(net.osmand.util.OpeningHoursParser) FileInputStream(java.io.FileInputStream) JSONException(org.json.JSONException) XMLStreamException(javax.xml.stream.XMLStreamException) IOException(java.io.IOException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) EntityId(net.osmand.osm.edit.Entity.EntityId) LatLon(net.osmand.data.LatLon) MapPointsLayer(net.osmand.swing.MapPointsLayer) JSONObject(org.json.JSONObject) OsmBaseStorage(net.osmand.osm.io.OsmBaseStorage) EntityInfo(net.osmand.osm.edit.EntityInfo) FileOutputStream(java.io.FileOutputStream) WindowEvent(java.awt.event.WindowEvent) JSONObject(org.json.JSONObject) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) JMenuBar(javax.swing.JMenuBar)

Example 2 with BasicOpeningHourRule

use of net.osmand.util.OpeningHoursParser.BasicOpeningHourRule in project Osmand by osmandapp.

the class BasicEditPoiFragment method onCreateView.

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_edit_poi_normal, container, false);
    TypedValue typedValue = new TypedValue();
    Resources.Theme theme = getActivity().getTheme();
    theme.resolveAttribute(android.R.attr.textColorSecondary, typedValue, true);
    int iconColor = typedValue.data;
    ImageView streetImageView = (ImageView) view.findViewById(R.id.streetImageView);
    streetImageView.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_street_name, iconColor));
    ImageView houseNumberImageView = (ImageView) view.findViewById(R.id.houseNumberImageView);
    houseNumberImageView.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_building_number, iconColor));
    ImageView phoneImageView = (ImageView) view.findViewById(R.id.phoneImageView);
    phoneImageView.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_call_dark, iconColor));
    ImageView webSiteImageView = (ImageView) view.findViewById(R.id.webSiteImageView);
    webSiteImageView.setImageDrawable(getPaintedContentIcon(R.drawable.ic_world_globe_dark, iconColor));
    ImageView descriptionImageView = (ImageView) view.findViewById(R.id.descriptionImageView);
    descriptionImageView.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_description, iconColor));
    ImageView openingHoursImageView = (ImageView) view.findViewById(R.id.openingHoursImageView);
    openingHoursImageView.setImageDrawable(getPaintedContentIcon(R.drawable.ic_action_time, iconColor));
    streetEditText = (EditText) view.findViewById(R.id.streetEditText);
    houseNumberEditText = (EditText) view.findViewById(R.id.houseNumberEditText);
    phoneEditText = (EditText) view.findViewById(R.id.phoneEditText);
    webSiteEditText = (EditText) view.findViewById(R.id.webSiteEditText);
    descriptionEditText = (EditText) view.findViewById(R.id.descriptionEditText);
    addTextWatcher(OSMSettings.OSMTagKey.ADDR_STREET.getValue(), streetEditText);
    addTextWatcher(OSMSettings.OSMTagKey.WEBSITE.getValue(), webSiteEditText);
    addTextWatcher(OSMSettings.OSMTagKey.PHONE.getValue(), phoneEditText);
    addTextWatcher(OSMSettings.OSMTagKey.ADDR_HOUSE_NUMBER.getValue(), houseNumberEditText);
    addTextWatcher(OSMSettings.OSMTagKey.DESCRIPTION.getValue(), descriptionEditText);
    Button addOpeningHoursButton = (Button) view.findViewById(R.id.addOpeningHoursButton);
    addOpeningHoursButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            BasicOpeningHourRule rule = new BasicOpeningHourRule();
            rule.setStartTime(9 * 60);
            rule.setEndTime(18 * 60);
            OpeningHoursDaysDialogFragment fragment = OpeningHoursDaysDialogFragment.createInstance(rule, -1);
            fragment.show(getChildFragmentManager(), "OpenTimeDialogFragment");
        }
    });
    LinearLayout openHoursContainer = (LinearLayout) view.findViewById(R.id.openHoursContainer);
    Drawable clockDrawable = getPaintedContentIcon(R.drawable.ic_action_time, iconColor);
    Drawable deleteDrawable = getPaintedContentIcon(R.drawable.ic_action_remove_dark, iconColor);
    if (savedInstanceState != null && savedInstanceState.containsKey(OPENING_HOURS)) {
        mOpeningHoursAdapter = new OpeningHoursAdapter((OpeningHoursParser.OpeningHours) savedInstanceState.getSerializable(OPENING_HOURS), openHoursContainer, getData(), clockDrawable, deleteDrawable);
        mOpeningHoursAdapter.updateViews();
    } else {
        mOpeningHoursAdapter = new OpeningHoursAdapter(new OpeningHoursParser.OpeningHours(), openHoursContainer, getData(), clockDrawable, deleteDrawable);
    }
    onFragmentActivated();
    return view;
}
Also used : BasicOpeningHourRule(net.osmand.util.OpeningHoursParser.BasicOpeningHourRule) Drawable(android.graphics.drawable.Drawable) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView) ImageButton(android.widget.ImageButton) Button(android.widget.Button) OpeningHoursDaysDialogFragment(net.osmand.plus.osmedit.dialogs.OpeningHoursDaysDialogFragment) Resources(android.content.res.Resources) ImageView(android.widget.ImageView) LinearLayout(android.widget.LinearLayout) TypedValue(android.util.TypedValue) Nullable(android.support.annotation.Nullable)

Example 3 with BasicOpeningHourRule

use of net.osmand.util.OpeningHoursParser.BasicOpeningHourRule in project Osmand by osmandapp.

the class OpeningHoursView method updateTimePickers.

public void updateTimePickers() {
    if (selectedRule > -1) {
        BasicOpeningHourRule item = time.getItem(selectedRule);
        if (item != null) {
            notifyingTime = false;
            timePickerStart.setCurrentHour(item.getStartTime() / 60);
            timePickerStart.setCurrentMinute(item.getStartTime() % 60);
            timePickerEnd.setCurrentHour(item.getEndTime() / 60);
            timePickerEnd.setCurrentMinute(item.getEndTime() % 60);
            notifyingTime = true;
        }
    }
}
Also used : BasicOpeningHourRule(net.osmand.util.OpeningHoursParser.BasicOpeningHourRule)

Aggregations

BasicOpeningHourRule (net.osmand.util.OpeningHoursParser.BasicOpeningHourRule)3 Resources (android.content.res.Resources)1 Drawable (android.graphics.drawable.Drawable)1 Nullable (android.support.annotation.Nullable)1 TypedValue (android.util.TypedValue)1 View (android.view.View)1 Button (android.widget.Button)1 ImageButton (android.widget.ImageButton)1 ImageView (android.widget.ImageView)1 LinearLayout (android.widget.LinearLayout)1 TextView (android.widget.TextView)1 Container (java.awt.Container)1 WindowAdapter (java.awt.event.WindowAdapter)1 WindowEvent (java.awt.event.WindowEvent)1 FileInputStream (java.io.FileInputStream)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 HashMap (java.util.HashMap)1 LinkedHashMap (java.util.LinkedHashMap)1 Map (java.util.Map)1