diff options
-rw-r--r-- | src/org/traccar/location/CellInfo.java | 136 | ||||
-rw-r--r-- | test/org/traccar/location/CellInfoTest.java | 36 |
2 files changed, 172 insertions, 0 deletions
diff --git a/src/org/traccar/location/CellInfo.java b/src/org/traccar/location/CellInfo.java new file mode 100644 index 000000000..fe61f3bec --- /dev/null +++ b/src/org/traccar/location/CellInfo.java @@ -0,0 +1,136 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.location; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.traccar.Config; +import org.traccar.Context; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +public class CellInfo { + + @JsonInclude(JsonInclude.Include.NON_DEFAULT) + public static class Cell { + + private int mcc; + private int mnc; + private int lac; + private int cid; + private int signal; + + public Cell() { + } + + public Cell(int mcc, int mnc, int lac, int cid, int signal) { + this.mcc = mcc; + this.mnc = mnc; + this.lac = lac; + this.cid = cid; + this.signal = signal; + } + + public int getMcc() { + return mcc; + } + + public void setMcc(int mcc) { + this.mcc = mcc; + } + + public int getMnc() { + return mnc; + } + + public void setMnc(int mnc) { + this.mnc = mnc; + } + + public int getLac() { + return lac; + } + + public void setLac(int lac) { + this.lac = lac; + } + + public int getCid() { + return cid; + } + + public void setCid(int cid) { + this.cid = cid; + } + + public int getSignal() { + return signal; + } + + public void setSignal(int signal) { + this.signal = signal; + } + } + + public CellInfo() { + } + + public CellInfo(Collection<Cell> cells) { + this.cells.addAll(cells); + } + + private List<Cell> cells = new ArrayList<>(); + + public List<Cell> getCells() { + return cells; + } + + public void addCell(int lac, int cid) { + Config config = Context.getConfig(); + if (config.hasKey("location.mcc") && config.hasKey("location.mnc")) { + int mcc = config.getInteger("location.mcc"); + int mnc = config.getInteger("location.mnc"); + cells.add(new Cell(mcc, mnc, lac, cid, 0)); + } + } + + public void addCell(int mcc, int mnc, int lac, int cid) { + cells.add(new Cell(mcc, mnc, lac, cid, 0)); + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(cells); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public static CellInfo fromString(String json) { + try { + return new CellInfo(Arrays.asList(new ObjectMapper().readValue(json, Cell[].class))); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/test/org/traccar/location/CellInfoTest.java b/test/org/traccar/location/CellInfoTest.java new file mode 100644 index 000000000..e78ce51fb --- /dev/null +++ b/test/org/traccar/location/CellInfoTest.java @@ -0,0 +1,36 @@ +package org.traccar.location; + +import org.junit.Assert; +import org.junit.Test; + +public class CellInfoTest { + + @Test + public void testToString() { + + CellInfo info = new CellInfo(); + info.addCell(0, 0, 1000, 2000); + info.addCell(400, 1, 3000, 4000); + + Assert.assertEquals("[{\"lac\":1000,\"cid\":2000},{\"mcc\":400,\"mnc\":1,\"lac\":3000,\"cid\":4000}]", info.toString()); + + } + + @Test + public void testFromString() { + + CellInfo info = CellInfo.fromString("[{\"lac\":1000,\"cid\":2000}]"); + + Assert.assertEquals(1, info.getCells().size()); + + CellInfo.Cell cell = info.getCells().get(0); + + Assert.assertEquals(0, cell.getMcc()); + Assert.assertEquals(0, cell.getMnc()); + Assert.assertEquals(1000, cell.getLac()); + Assert.assertEquals(2000, cell.getCid()); + Assert.assertEquals(0, cell.getSignal()); + + } + +} |