List of usage examples for java.nio ByteOrder LITTLE_ENDIAN
ByteOrder LITTLE_ENDIAN
To view the source code for java.nio ByteOrder LITTLE_ENDIAN.
Click Source Link
From source file:uk.org.openseizuredetector.SdServer.java
/** * Set this server to receive pebble data by registering it as * A PebbleDataReceiver/*w w w . j a v a 2 s . co m*/ */ private void startPebbleServer() { Log.v(TAG, "StartPebbleServer()"); final Handler handler = new Handler(); msgDataHandler = new PebbleKit.PebbleDataReceiver(SD_UUID) { @Override public void receiveData(final Context context, final int transactionId, final PebbleDictionary data) { Log.v(TAG, "Received message from Pebble - data type=" + data.getUnsignedIntegerAsLong(KEY_DATA_TYPE)); // If we have a message, the app must be running mPebbleAppRunningCheck = true; PebbleKit.sendAckToPebble(context, transactionId); //Log.v(TAG,"Message is: "+data.toJsonString()); if (data.getUnsignedIntegerAsLong(KEY_DATA_TYPE) == DATA_TYPE_RESULTS) { Log.v(TAG, "DATA_TYPE = Results"); sdData.dataTime.setToNow(); Log.v(TAG, "sdData.dataTime=" + sdData.dataTime); sdData.alarmState = data.getUnsignedIntegerAsLong(KEY_ALARMSTATE); sdData.maxVal = data.getUnsignedIntegerAsLong(KEY_MAXVAL); sdData.maxFreq = data.getUnsignedIntegerAsLong(KEY_MAXFREQ); sdData.specPower = data.getUnsignedIntegerAsLong(KEY_SPECPOWER); sdData.roiPower = data.getUnsignedIntegerAsLong(KEY_ROIPOWER); sdData.alarmPhrase = "Unknown"; if (sdData.alarmState == 0) { sdData.alarmPhrase = "OK"; } if (sdData.alarmState == 1) { sdData.alarmPhrase = "WARNING"; if (mLogAlarms) { Log.v(TAG, "WARNING - Loggin to SD Card"); writeAlarmToSD(); logData(); } else { Log.v(TAG, "WARNING"); } warningBeep(); } if (sdData.alarmState == 2) { sdData.alarmPhrase = "ALARM"; if (mLogAlarms) { Log.v(TAG, "***ALARM*** - Loggin to SD Card"); writeAlarmToSD(); logData(); } else { Log.v(TAG, "***ALARM***"); } // Make alarm beep tone alarmBeep(); // Send SMS Alarm. if (mSMSAlarm) { Time tnow = new Time(Time.getCurrentTimezone()); tnow.setToNow(); // limit SMS alarms to one per minute if ((tnow.toMillis(false) - mSMSTime.toMillis(false)) > 60000) { sendSMSAlarm(); mSMSTime = tnow; } } } // Read the data that has been sent, and convert it into // an integer array. byte[] byteArr = data.getBytes(KEY_SPEC_DATA); IntBuffer intBuf = ByteBuffer.wrap(byteArr).order(ByteOrder.LITTLE_ENDIAN).asIntBuffer(); int[] intArray = new int[intBuf.remaining()]; intBuf.get(intArray); for (int i = 0; i < intArray.length; i++) { sdData.simpleSpec[i] = intArray[i]; } } if (data.getUnsignedIntegerAsLong(KEY_DATA_TYPE) == DATA_TYPE_SETTINGS) { Log.v(TAG, "DATA_TYPE = Settings"); sdData.alarmFreqMin = data.getUnsignedIntegerAsLong(KEY_ALARM_FREQ_MIN); sdData.alarmFreqMax = data.getUnsignedIntegerAsLong(KEY_ALARM_FREQ_MAX); sdData.nMin = data.getUnsignedIntegerAsLong(KEY_NMIN); sdData.nMax = data.getUnsignedIntegerAsLong(KEY_NMAX); sdData.warnTime = data.getUnsignedIntegerAsLong(KEY_WARN_TIME); sdData.alarmTime = data.getUnsignedIntegerAsLong(KEY_ALARM_TIME); sdData.alarmThresh = data.getUnsignedIntegerAsLong(KEY_ALARM_THRESH); sdData.alarmRatioThresh = data.getUnsignedIntegerAsLong(KEY_ALARM_RATIO_THRESH); sdData.batteryPc = data.getUnsignedIntegerAsLong(KEY_BATTERY_PC); sdData.haveSettings = true; } } }; PebbleKit.registerReceivedDataHandler(this, msgDataHandler); }
From source file:org.bimserver.geometry.GeometryRunner.java
@Override public void run() { Thread.currentThread().setName("GeometryRunner"); long start = System.nanoTime(); job.setStartNanos(start);/* w w w. j a v a 2 s . com*/ try { HashMapVirtualObject next = objectProvider.next(); Query query = new Query("Double buffer query " + eClass.getName(), this.streamingGeometryGenerator.packageMetaData); QueryPart queryPart = query.createQueryPart(); while (next != null) { long oid = next.getOid(); queryPart.addOid(oid); if (eClass.isSuperTypeOf(next.eClass())) { if (originalQuery.getQueryParts().get(0).getOids().contains(oid)) { job.addObject(next.getOid(), next.eClass().getName()); } } next = objectProvider.next(); } objectProvider = new QueryObjectProvider(databaseSession, this.streamingGeometryGenerator.bimServer, query, Collections.singleton(queryContext.getRoid()), this.streamingGeometryGenerator.packageMetaData); StreamingSerializer serializer = ifcSerializerPlugin.createSerializer(new PluginConfiguration()); RenderEngine renderEngine = null; byte[] bytes = null; try { final Set<HashMapVirtualObject> objects = new LinkedHashSet<>(); ObjectProviderProxy proxy = new ObjectProviderProxy(objectProvider, new ObjectListener() { @Override public void newObject(HashMapVirtualObject next) { if (eClass.isSuperTypeOf(next.eClass())) { if (next.eGet( GeometryRunner.this.streamingGeometryGenerator.representationFeature) != null) { if (originalQuery.getQueryParts().get(0).getOids().contains(next.getOid())) { objects.add(next); } } } } }); serializer.init(proxy, null, null, this.streamingGeometryGenerator.bimServer.getPluginManager(), this.streamingGeometryGenerator.packageMetaData); ByteArrayOutputStream baos = new ByteArrayOutputStream(); IOUtils.copy(serializer.getInputStream(), baos); bytes = baos.toByteArray(); InputStream in = new ByteArrayInputStream(bytes); Map<Integer, HashMapVirtualObject> notFoundObjects = new HashMap<>(); Set<Range> reusableGeometryData = new HashSet<>(); Map<Long, TemporaryGeometryData> productToData = new HashMap<>(); try { if (!objects.isEmpty()) { renderEngine = renderEnginePool.borrowObject(); try (RenderEngineModel renderEngineModel = renderEngine.openModel(in, bytes.length)) { renderEngineModel.setSettings(renderEngineSettings); renderEngineModel.setFilter(renderEngineFilter); try { renderEngineModel.generateGeneralGeometry(); } catch (RenderEngineException e) { if (e.getCause() instanceof java.io.EOFException) { if (objects.isEmpty() || eClass.getName().equals("IfcAnnotation")) { // SKIP } else { StreamingGeometryGenerator.LOGGER.error("Error in " + eClass.getName(), e); } } } OidConvertingSerializer oidConvertingSerializer = (OidConvertingSerializer) serializer; Map<Long, Integer> oidToEid = oidConvertingSerializer.getOidToEid(); Map<Long, DebuggingInfo> debuggingInfo = new HashMap<>(); for (HashMapVirtualObject ifcProduct : objects) { if (!this.streamingGeometryGenerator.running) { return; } Integer expressId = oidToEid.get(ifcProduct.getOid()); try { RenderEngineInstance renderEngineInstance = renderEngineModel .getInstanceFromExpressId(expressId); RenderEngineGeometry geometry = renderEngineInstance.generateGeometry(); boolean translate = true; // if (geometry == null || // geometry.getIndices().length == 0) { // LOGGER.info("Running again..."); // renderEngineModel.setFilter(renderEngineFilterTransformed); // geometry = // renderEngineInstance.generateGeometry(); // if (geometry != null) { // translate = false; // } // renderEngineModel.setFilter(renderEngineFilter); // } if (geometry != null && geometry.getNrIndices() > 0) { HashMapVirtualObject geometryInfo = new HashMapVirtualObject(queryContext, GeometryPackage.eINSTANCE.getGeometryInfo()); HashMapWrappedVirtualObject bounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getBounds()); HashMapWrappedVirtualObject minBounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); HashMapWrappedVirtualObject maxBounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); minBounds.set("x", Double.POSITIVE_INFINITY); minBounds.set("y", Double.POSITIVE_INFINITY); minBounds.set("z", Double.POSITIVE_INFINITY); maxBounds.set("x", -Double.POSITIVE_INFINITY); maxBounds.set("y", -Double.POSITIVE_INFINITY); maxBounds.set("z", -Double.POSITIVE_INFINITY); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_IfcProductOid(), ifcProduct.getOid()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Bounds(), bounds); bounds.setAttribute(GeometryPackage.eINSTANCE.getBounds_Min(), minBounds); bounds.setAttribute(GeometryPackage.eINSTANCE.getBounds_Max(), maxBounds); HashMapWrappedVirtualObject boundsUntransformed = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getBounds()); WrappedVirtualObject minBoundsUntranslated = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); WrappedVirtualObject maxBoundsUntranslated = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); minBoundsUntranslated.set("x", Double.POSITIVE_INFINITY); minBoundsUntranslated.set("y", Double.POSITIVE_INFINITY); minBoundsUntranslated.set("z", Double.POSITIVE_INFINITY); maxBoundsUntranslated.set("x", -Double.POSITIVE_INFINITY); maxBoundsUntranslated.set("y", -Double.POSITIVE_INFINITY); maxBoundsUntranslated.set("z", -Double.POSITIVE_INFINITY); boundsUntransformed.setAttribute(GeometryPackage.eINSTANCE.getBounds_Min(), minBoundsUntranslated); boundsUntransformed.setAttribute(GeometryPackage.eINSTANCE.getBounds_Max(), maxBoundsUntranslated); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_BoundsUntransformed(), boundsUntransformed); double volume = 0; ObjectNode additionalData = renderEngineInstance.getAdditionalData(); if (streamingGeometryGenerator.isCalculateQuantities()) { if (additionalData != null) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_AdditionalData(), additionalData.toString()); if (additionalData.has("TOTAL_SURFACE_AREA")) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Area(), additionalData.get("TOTAL_SURFACE_AREA").asDouble()); } if (additionalData.has("TOTAL_SHAPE_VOLUME")) { volume = additionalData.get("TOTAL_SHAPE_VOLUME").asDouble(); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Volume(), volume); } } } HashMapVirtualObject geometryData = new HashMapVirtualObject(queryContext, GeometryPackage.eINSTANCE.getGeometryData()); geometryData.set("type", databaseSession.getCid(eClass)); ByteBuffer indices = geometry.getIndices(); IntBuffer indicesAsInt = indices.order(ByteOrder.LITTLE_ENDIAN) .asIntBuffer(); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_Reused(), 1); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_Indices(), createBuffer(queryContext, indices)); geometryData.set("nrIndices", indicesAsInt.capacity()); ByteBuffer vertices = geometry.getVertices(); DoubleBuffer verticesAsDouble = vertices.order(ByteOrder.LITTLE_ENDIAN) .asDoubleBuffer(); geometryData.set("nrVertices", verticesAsDouble.capacity()); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_Vertices(), createBuffer(queryContext, vertices)); ByteBuffer normals = geometry.getNormals(); FloatBuffer normalsAsFloat = normals.order(ByteOrder.LITTLE_ENDIAN) .asFloatBuffer(); geometryData.set("nrNormals", normalsAsFloat.capacity()); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_Normals(), createBuffer(queryContext, normals)); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_PrimitiveCount(), indicesAsInt.capacity() / 3); job.setTrianglesGenerated(indicesAsInt.capacity() / 3); job.getReport().incrementTriangles(indicesAsInt.capacity() / 3); streamingGeometryGenerator.cacheGeometryData(geometryData, vertices); ColorMap colorMap = new ColorMap(); ByteBuffer colors = ByteBuffer.wrap(new byte[0]); IntBuffer materialIndices = geometry.getMaterialIndices() .order(ByteOrder.LITTLE_ENDIAN).asIntBuffer(); if (materialIndices != null && materialIndices.capacity() > 0) { FloatBuffer materialsAsFloat = geometry.getMaterials() .order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer(); boolean hasMaterial = false; colors = ByteBuffer.allocate((verticesAsDouble.capacity() / 3) * 4); double[] triangle = new double[9]; for (int i = 0; i < materialIndices.capacity(); ++i) { int c = materialIndices.get(i); if (c > -1) { Color4f color = new Color4f(); for (int l = 0; l < 4; ++l) { float val = fixColor(materialsAsFloat.get(4 * c + l)); color.set(l, val); } for (int j = 0; j < 3; ++j) { int k = indicesAsInt.get(i * 3 + j); triangle[j * 3 + 0] = verticesAsDouble.get(3 * k); triangle[j * 3 + 1] = verticesAsDouble.get(3 * k + 1); triangle[j * 3 + 2] = verticesAsDouble.get(3 * k + 2); hasMaterial = true; for (int l = 0; l < 4; ++l) { float val = fixColor(materialsAsFloat.get(4 * c + l)); colors.put(4 * k + l, UnsignedBytes.checkedCast((int) (val * 255))); } } colorMap.addTriangle(triangle, color); } } if (hasMaterial) { ColorMap2 colorMap2 = new ColorMap2(); byte[] colorB = new byte[4]; for (int i = 0; i < colors.capacity(); i += 4) { colors.get(colorB); colorMap2.addColor(colorB); } HashMapVirtualObject colorPack = new HashMapVirtualObject( queryContext, GeometryPackage.eINSTANCE.getColorPack()); colorPack.set(GeometryPackage.eINSTANCE.getColorPack_Data(), colorMap2.toByteArray()); colorPack.save(); geometryData.setReference( GeometryPackage.eINSTANCE.getGeometryData_ColorPack(), colorPack.getOid(), 0); } if (colorMap.usedColors() == 0) { } else if (colorMap.usedColors() == 1) { WrappedVirtualObject color = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector4f()); Color4f firstColor = colorMap.getFirstColor(); color.set("x", firstColor.getR()); color.set("y", firstColor.getG()); color.set("z", firstColor.getB()); color.set("w", firstColor.getA()); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_Color(), color); // This tells the code further on to not store this geometry, as it can be easily generated hasMaterial = false; } else { Color4f mostUsed = colorMap.getMostUsedColor(); WrappedVirtualObject color = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector4f()); color.set("x", mostUsed.getR()); color.set("y", mostUsed.getG()); color.set("z", mostUsed.getB()); color.set("w", mostUsed.getA()); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_MostUsedColor(), color); } if (hasMaterial) { geometryData.set("nrColors", colors.capacity()); geometryData.set( GeometryPackage.eINSTANCE.getGeometryData_ColorsQuantized(), createBuffer(queryContext, colors)); } else { geometryData.set("nrColors", 0); } } else { geometryData.set("nrColors", 0); } boolean hasTransparency = colorMap.hasTransparency(); double[] productTranformationMatrix = new double[16]; if (translate && renderEngineInstance.getTransformationMatrix() != null) { productTranformationMatrix = renderEngineInstance .getTransformationMatrix(); } else { Matrix.setIdentityM(productTranformationMatrix, 0); } geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_NrColors(), colors.capacity()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_NrVertices(), verticesAsDouble.capacity()); geometryInfo.setReference(GeometryPackage.eINSTANCE.getGeometryInfo_Data(), geometryData.getOid(), 0); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_HasTransparency(), hasTransparency); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_HasTransparency(), hasTransparency); long size = this.streamingGeometryGenerator.getSize(geometryData); for (int i = 0; i < indicesAsInt.capacity(); i++) { this.streamingGeometryGenerator.processExtends(minBounds, maxBounds, productTranformationMatrix, verticesAsDouble, indicesAsInt.get(i) * 3, generateGeometryResult); this.streamingGeometryGenerator.processExtendsUntranslated(geometryInfo, verticesAsDouble, indicesAsInt.get(i) * 3, generateGeometryResult); } HashMapWrappedVirtualObject boundsUntransformedMm = createMmBounds( geometryInfo, boundsUntransformed, generateGeometryResult.getMultiplierToMm()); geometryInfo.set("boundsUntransformedMm", boundsUntransformedMm); HashMapWrappedVirtualObject boundsMm = createMmBounds(geometryInfo, bounds, generateGeometryResult.getMultiplierToMm()); geometryInfo.set("boundsMm", boundsMm); ByteBuffer normalsQuantized = quantizeNormals(normalsAsFloat); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_NormalsQuantized(), createBuffer(queryContext, normalsQuantized)); HashMapWrappedVirtualObject geometryDataBounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getBounds()); WrappedVirtualObject geometryDataBoundsMin = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); WrappedVirtualObject geometryDataBoundsMax = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); geometryDataBoundsMin.set("x", ((HashMapWrappedVirtualObject) boundsMm.get("min")).get("x")); geometryDataBoundsMin.set("y", ((HashMapWrappedVirtualObject) boundsMm.get("min")).get("y")); geometryDataBoundsMin.set("z", ((HashMapWrappedVirtualObject) boundsMm.get("min")).get("z")); geometryDataBoundsMax.set("x", ((HashMapWrappedVirtualObject) boundsMm.get("max")).get("x")); geometryDataBoundsMax.set("y", ((HashMapWrappedVirtualObject) boundsMm.get("max")).get("y")); geometryDataBoundsMax.set("z", ((HashMapWrappedVirtualObject) boundsMm.get("max")).get("z")); geometryDataBounds.setAttribute(GeometryPackage.eINSTANCE.getBounds_Min(), geometryDataBoundsMin); geometryDataBounds.setAttribute(GeometryPackage.eINSTANCE.getBounds_Max(), geometryDataBoundsMax); geometryData.setAttribute( GeometryPackage.eINSTANCE.getGeometryData_BoundsMm(), geometryDataBounds); if (volume == 0) { volume = getVolumeFromBounds(boundsUntransformed); } float nrTriangles = geometry.getNrIndices() / 3; Density density = new Density(eClass.getName(), (float) volume, getBiggestFaceFromBounds(boundsUntransformedMm), (long) nrTriangles, geometryInfo.getOid()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Density(), density.getDensityValue()); generateGeometryResult.addDensity(density); double[] mibu = new double[] { (double) minBoundsUntranslated .eGet(GeometryPackage.eINSTANCE.getVector3f_X()), (double) minBoundsUntranslated .eGet(GeometryPackage.eINSTANCE.getVector3f_Y()), (double) minBoundsUntranslated .eGet(GeometryPackage.eINSTANCE.getVector3f_Z()), 1d }; double[] mabu = new double[] { (double) maxBoundsUntranslated .eGet(GeometryPackage.eINSTANCE.getVector3f_X()), (double) maxBoundsUntranslated .eGet(GeometryPackage.eINSTANCE.getVector3f_Y()), (double) maxBoundsUntranslated .eGet(GeometryPackage.eINSTANCE.getVector3f_Z()), 1d }; if (reuseGeometry) { /* TODO It still happens that geometry that should be reused is not reused, one of the reasons is still concurrency: * - When the same geometry is processed concurrently they could both do the hash check at a time when there is no cached version, then they both think it's non-reused geometry */ int hash = this.streamingGeometryGenerator.hash(indices, vertices, normals, colors); int firstIndex = indicesAsInt.get(0); int lastIndex = indicesAsInt.get(indicesAsInt.capacity() - 1); double[] firstVertex = new double[] { verticesAsDouble.get(firstIndex), verticesAsDouble.get(firstIndex + 1), verticesAsDouble.get(firstIndex + 2) }; double[] lastVertex = new double[] { verticesAsDouble.get(lastIndex * 3), verticesAsDouble.get(lastIndex * 3 + 1), verticesAsDouble.get(lastIndex * 3 + 2) }; Range range = new Range(firstVertex, lastVertex); Long referenceOid = this.streamingGeometryGenerator.hashes.get(hash); if (referenceOid != null) { HashMapVirtualObject referencedData = databaseSession .getFromCache(referenceOid); if (referencedData == null) { LOGGER.error("Object not found in cache: " + referenceOid + " (hash: " + hash + ")"); } synchronized (referencedData) { Integer currentValue = (Integer) referencedData.get("reused"); referencedData.set("reused", currentValue + 1); } HashMapWrappedVirtualObject dataBounds = (HashMapWrappedVirtualObject) referencedData .get("boundsMm"); extendBounds(boundsMm, dataBounds); referencedData.saveOverwrite(); geometryInfo.setReference( GeometryPackage.eINSTANCE.getGeometryInfo_Data(), referenceOid, 0); this.streamingGeometryGenerator.bytesSavedByHash.addAndGet(size); } else if (geometryReused) { // This is true when this geometry is part of a mapped item mapping (and used more than once) boolean found = false; // for (Range r : // reusableGeometryData) { // if (r.isSimilar(range)) { // geometryInfo.setReference(GeometryPackage.eINSTANCE.getGeometryInfo_Data(), // r.getGeometryDataOid(), 0); // float[] offset = // r.getOffset(range); // ProductDef productDef = // map.get(ifcProduct.getOid()); // double[] mappedItemMatrix = // null; // if (productDef != null && // productDef.getMatrix() != // null) { // mappedItemMatrix = // productDef.getMatrix(); // } else { // Matrix.translateM(mappedItemMatrix, // 0, offset[0], offset[1], // offset[2]); // } // double[] result = new // double[16]; // Matrix.multiplyMM(result, 0, // mappedItemMatrix, 0, // productTranformationMatrix, // 0); // setTransformationMatrix(geometryInfo, // result); // Overwritten? // bytesSavedByTransformation.addAndGet(size); // found = true; // break; // } // } if (!found) { range.setGeometryDataOid(geometryData.getOid()); reusableGeometryData.add(range); if (streamingGeometryGenerator.isCalculateQuantities()) { if (additionalData != null) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE .getGeometryInfo_AdditionalData(), additionalData.toString()); if (additionalData.has("SURFACE_AREA_ALONG_Z")) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE .getGeometryInfo_Area(), additionalData.get("SURFACE_AREA_ALONG_Z") .asDouble()); } if (additionalData.has("TOTAL_SHAPE_VOLUME")) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE .getGeometryInfo_Volume(), additionalData.get("TOTAL_SHAPE_VOLUME") .asDouble()); } } } geometryInfo.setAttribute( GeometryPackage.eINSTANCE .getGeometryInfo_PrimitiveCount(), indicesAsInt.capacity() / 3); productToData.put(ifcProduct.getOid(), new TemporaryGeometryData(geometryData.getOid(), additionalData, indicesAsInt.capacity() / 3, size, mibu, mabu, indicesAsInt, verticesAsDouble, hasTransparency, colors.capacity())); geometryData.save(); databaseSession.cache((HashMapVirtualObject) geometryData); } } else { // if (sizes.containsKey(size) // && sizes.get(size).eClass() // == ifcProduct.eClass()) { // LOGGER.info("More reuse might // be possible " + size + " " + // ifcProduct.eClass().getName() // + ":" + ifcProduct.getOid() + // " / " + // sizes.get(size).eClass().getName() // + ":" + // sizes.get(size).getOid()); // } // if (geometryReused) { // range.setGeometryDataOid(geometryData.getOid()); // reusableGeometryData.add(range); // productToData.put(ifcProduct.getOid(), new TemporaryGeometryData(geometryData.getOid(), renderEngineInstance.getArea(), renderEngineInstance.getVolume(), indices.length / 3, size, mibu, mabu, indices, vertices)); // } // TODO else?? // So reuse is on, the data was not found by hash, and this item is not in a mapped item // By saving it before putting it in the cache/hashmap, we make sure we won't get a BimserverConcurrentModificationException geometryData.save(); // TODO Why?? databaseSession.cache((HashMapVirtualObject) geometryData); this.streamingGeometryGenerator.hashes.put(hash, geometryData.getOid()); // sizes.put(size, ifcProduct); } } else { geometryData.save(); databaseSession.cache((HashMapVirtualObject) geometryData); } this.streamingGeometryGenerator.setTransformationMatrix(geometryInfo, productTranformationMatrix); debuggingInfo.put(ifcProduct.getOid(), new DebuggingInfo(productTranformationMatrix, indices.asIntBuffer(), vertices.asFloatBuffer())); geometryInfo.save(); this.streamingGeometryGenerator.totalBytes.addAndGet(size); ifcProduct.setReference(this.streamingGeometryGenerator.geometryFeature, geometryInfo.getOid(), 0); ifcProduct.saveOverwrite(); // Doing a sync here because probably // writing large amounts of data, and db // only syncs every 100.000 writes by // default // databaseSession.getKeyValueStore().sync(); } else { // TODO } } catch (EntityNotFoundException e) { // e.printStackTrace(); // As soon as we find a representation that // is not Curve2D, then we should show a // "INFO" message in the log to indicate // there could be something wrong boolean ignoreNotFound = eClass.getName().equals("IfcAnnotation"); // for (Object rep : representations) { // if (rep instanceof // IfcShapeRepresentation) { // IfcShapeRepresentation // ifcShapeRepresentation = // (IfcShapeRepresentation)rep; // if // (!"Curve2D".equals(ifcShapeRepresentation.getRepresentationType())) // { // ignoreNotFound = false; // } // } // } if (!ignoreNotFound) { // LOGGER.warn("Entity not found " + // ifcProduct.eClass().getName() + " " + // (expressId) + "/" + // ifcProduct.getOid()); notFoundObjects.put(expressId, ifcProduct); } } catch (BimserverDatabaseException | RenderEngineException e) { StreamingGeometryGenerator.LOGGER.error("", e); } } if (geometryReused && map != null) { // We pick the first product and use that product to try and get the original data long firstKey = map.keySet().iterator().next(); ProductDef masterProductDef = map.get(firstKey); for (long key : map.keySet()) { if (key != firstKey) { ProductDef productDef = map.get(key); HashMapVirtualObject ifcProduct = productDef.getObject(); TemporaryGeometryData masterGeometryData = productToData .get(productDef.getMasterOid()); if (masterGeometryData != null) { HashMapVirtualObject geometryInfo = new HashMapVirtualObject( queryContext, GeometryPackage.eINSTANCE.getGeometryInfo()); HashMapWrappedVirtualObject bounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getBounds()); HashMapWrappedVirtualObject minBounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); HashMapWrappedVirtualObject maxBounds = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Bounds(), bounds); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_HasTransparency(), masterGeometryData.hasTransparancy()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_NrColors(), masterGeometryData.getNrColors()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_NrVertices(), masterGeometryData.getNrVertices()); bounds.set("min", minBounds); bounds.set("max", maxBounds); minBounds.set("x", Double.POSITIVE_INFINITY); minBounds.set("y", Double.POSITIVE_INFINITY); minBounds.set("z", Double.POSITIVE_INFINITY); maxBounds.set("x", -Double.POSITIVE_INFINITY); maxBounds.set("y", -Double.POSITIVE_INFINITY); maxBounds.set("z", -Double.POSITIVE_INFINITY); double[] mibu = masterGeometryData.getMibu(); double[] mabu = masterGeometryData.getMabu(); HashMapWrappedVirtualObject boundsUntransformed = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getBounds()); WrappedVirtualObject minBoundsUntransformed = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); WrappedVirtualObject maxBoundsUntransformed = new HashMapWrappedVirtualObject( GeometryPackage.eINSTANCE.getVector3f()); minBoundsUntransformed.set("x", mibu[0]); minBoundsUntransformed.set("y", mibu[1]); minBoundsUntransformed.set("z", mibu[2]); maxBoundsUntransformed.set("x", mabu[0]); maxBoundsUntransformed.set("y", mabu[1]); maxBoundsUntransformed.set("z", mabu[2]); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_IfcProductOid(), ifcProduct.getOid()); boundsUntransformed.setAttribute( GeometryPackage.eINSTANCE.getBounds_Min(), minBoundsUntransformed); boundsUntransformed.setAttribute( GeometryPackage.eINSTANCE.getBounds_Max(), maxBoundsUntransformed); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_BoundsUntransformed(), boundsUntransformed); ObjectNode additionalData = masterGeometryData.getAdditionalData(); double volume = 0; if (additionalData != null) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_AdditionalData(), additionalData.toString()); if (additionalData.has("SURFACE_AREA_ALONG_Z")) { geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Area(), additionalData.get("SURFACE_AREA_ALONG_Z").asDouble()); } if (additionalData.has("TOTAL_SHAPE_VOLUME")) { volume = additionalData.get("TOTAL_SHAPE_VOLUME").asDouble(); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Volume(), volume); } } geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_PrimitiveCount(), masterGeometryData.getNrPrimitives()); job.getReport() .incrementTriangles(masterGeometryData.getNrPrimitives()); this.streamingGeometryGenerator.bytesSavedByMapping .addAndGet(masterGeometryData.getSize()); this.streamingGeometryGenerator.totalBytes .addAndGet(masterGeometryData.getSize()); // First, invert the master's mapping matrix double[] inverted = Matrix.identity(); if (!Matrix.invertM(inverted, 0, masterProductDef.getMappingMatrix(), 0)) { LOGGER.info( "No inverse, this should not be able to happen at this time, please report"); continue; } double[] finalMatrix = Matrix.identity(); double[] totalTranformationMatrix = Matrix.identity(); // Apply the mapping matrix of the product Matrix.multiplyMM(finalMatrix, 0, productDef.getMappingMatrix(), 0, inverted, 0); // Apply the product matrix of the product Matrix.multiplyMM(totalTranformationMatrix, 0, productDef.getProductMatrix(), 0, finalMatrix, 0); if (geometryGenerationDebugger != null) { // if (debuggingInfo.containsKey(ifcProduct.getOid())) { // DebuggingInfo debuggingInfo2 = debuggingInfo.get(ifcProduct.getOid()); // DebuggingInfo debuggingInfo3 = debuggingInfo.get(productDef.getMasterOid()); // // if (debuggingInfo2.getIndices().length != debuggingInfo3.getIndices().length) { // LOGGER.error("Different sizes for indices, weird..."); // LOGGER.error(ifcProduct.getOid() + " / " + productDef.getMasterOid()); // } else { // for (int i=0; i<debuggingInfo2.getIndices().length; i++) { // int index = debuggingInfo2.getIndices()[i]; // float[] vertex = new float[]{debuggingInfo2.getVertices()[index * 3], debuggingInfo2.getVertices()[index * 3 + 1], debuggingInfo2.getVertices()[index * 3 + 2], 1}; // float[] transformedOriginal = new float[4]; // Matrix.multiplyMV(transformedOriginal, 0, debuggingInfo2.getProductTranformationMatrix(), 0, vertex, 0); // float[] transformedNew = new float[4]; // int index2 = debuggingInfo3.getIndices()[i]; // float[] vertex2 = new float[]{debuggingInfo3.getVertices()[index2 * 3], debuggingInfo3.getVertices()[index2 * 3 + 1], debuggingInfo3.getVertices()[index2 * 3 + 2], 1}; // Matrix.multiplyMV(transformedNew, 0, totalTranformationMatrix, 0, vertex2, 0); // // // TODO margin should depend on bb of complete model // if (!almostTheSame((String)ifcProduct.get("GlobalId"), transformedNew, transformedOriginal, 0.05F)) { // geometryGenerationDebugger.transformedVertexNotMatching(ifcProduct, transformedOriginal, transformedNew, debuggingInfo2.getProductTranformationMatrix(), totalTranformationMatrix); // } // } // } // almostTheSame((String)ifcProduct.get("GlobalId"), debuggingInfo2.getProductTranformationMatrix(), totalTranformationMatrix, 0.01D); // } } IntBuffer indices = masterGeometryData.getIndices(); for (int i = 0; i < indices.capacity(); i++) { this.streamingGeometryGenerator.processExtends(minBounds, maxBounds, totalTranformationMatrix, masterGeometryData.getVertices(), indices.get(i) * 3, generateGeometryResult); } HashMapWrappedVirtualObject boundsUntransformedMm = createMmBounds( geometryInfo, boundsUntransformed, generateGeometryResult.getMultiplierToMm()); geometryInfo.set("boundsUntransformedMm", boundsUntransformedMm); HashMapWrappedVirtualObject boundsMm = createMmBounds(geometryInfo, bounds, generateGeometryResult.getMultiplierToMm()); geometryInfo.set("boundsMm", boundsMm); float nrTriangles = masterGeometryData.getNrPrimitives(); Density density = new Density(eClass.getName(), (float) volume, getBiggestFaceFromBounds(boundsUntransformedMm), (long) nrTriangles, geometryInfo.getOid()); geometryInfo.setAttribute( GeometryPackage.eINSTANCE.getGeometryInfo_Density(), density.getDensityValue()); generateGeometryResult.addDensity(density); HashMapVirtualObject referencedData = databaseSession .getFromCache(masterGeometryData.getOid()); Integer currentValue = (Integer) referencedData.get("reused"); referencedData.set("reused", currentValue + 1); HashMapWrappedVirtualObject dataBounds = (HashMapWrappedVirtualObject) referencedData .get("boundsMm"); extendBounds(boundsMm, dataBounds); // TODO this keeping track of the amount of reuse, takes it's toll on memory usage. Basically all geometry ends up in memory by the time the Geometry generation is done // We should try to see whether we can use BDB's mechanism to do partial retrievals/updates of a records here, because we only need to update just one value // Another, simpler option would be to introduce another layer between GeometryInfo and GeometryData, so we don't have to cache the actual data (vertices etc... the bulk) // In that case however the BinarySerializer would increase in complexity // This seems to have been partially solved now since GeometryData does not contain the bulk of the data anymore (the byte[]s are now in "Buffer"). referencedData.saveOverwrite(); geometryInfo.setReference( GeometryPackage.eINSTANCE.getGeometryInfo_Data(), masterGeometryData.getOid(), 0); // for (int i = 0; i < // indices.length; i++) { // processExtends(geometryInfo, // productTranformationMatrix, // vertices, indices[i] * 3, // generateGeometryResult); // processExtendsUntranslated(geometryInfo, // vertices, indices[i] * 3, // generateGeometryResult); // } // calculateObb(geometryInfo, // productTranformationMatrix, // indices, vertices, // generateGeometryResult); this.streamingGeometryGenerator.setTransformationMatrix(geometryInfo, totalTranformationMatrix); geometryInfo.save(); // totalBytes.addAndGet(size); ifcProduct.setReference(this.streamingGeometryGenerator.geometryFeature, geometryInfo.getOid(), 0); ifcProduct.saveOverwrite(); } } } } } } } finally { if (renderEngine != null) { renderEnginePool.returnObject(renderEngine); } try { if (!notFoundObjects.isEmpty()) { writeDebugFile(bytes, false, notFoundObjects); StringBuilder sb = new StringBuilder(); for (Integer key : notFoundObjects.keySet()) { sb.append(key + " (" + notFoundObjects.get(key).getOid() + ")"); sb.append(", "); } sb.delete(sb.length() - 2, sb.length()); job.setException(new Exception("Missing objects in model (" + sb.toString() + ")")); } else if (writeOutputFiles) { writeDebugFile(bytes, false, null); } in.close(); } catch (Throwable e) { } finally { } this.streamingGeometryGenerator.jobsDone.incrementAndGet(); this.streamingGeometryGenerator.updateProgress(); } } catch (Exception e) { StreamingGeometryGenerator.LOGGER.error("", e); writeDebugFile(bytes, true, null); job.setException(e); // LOGGER.error("Original query: " + originalQuery, e); } } catch (Exception e) { StreamingGeometryGenerator.LOGGER.error("", e); // LOGGER.error("Original query: " + originalQuery, e); } long end = System.nanoTime(); job.setEndNanos(end); }
From source file:com.wolkabout.hexiwear.service.BluetoothService.java
public void setTime() { Log.d(TAG, "Setting time..."); if (!isConnected || alertIn == null) { Log.w(TAG, "Time not set."); return;/* ww w . j a v a 2 s. c o m*/ } final byte[] time = new byte[20]; final long currentTime = System.currentTimeMillis(); final long currentTimeWithTimeZoneOffset = (currentTime + TimeZone.getDefault().getOffset(currentTime)) / 1000; final ByteBuffer buffer = ByteBuffer.allocate(8); buffer.order(ByteOrder.LITTLE_ENDIAN).asLongBuffer().put(currentTimeWithTimeZoneOffset); final byte[] utcBytes = buffer.array(); final byte length = 0x04; time[0] = WRITE_TIME; time[1] = length; time[2] = utcBytes[0]; time[3] = utcBytes[1]; time[4] = utcBytes[2]; time[5] = utcBytes[3]; alertIn.setValue(time); alertIn.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_DEFAULT); bluetoothGatt.writeCharacteristic(alertIn); }
From source file:org.zuinnote.hadoop.bitcoin.format.BitcoinBlockReader.java
public ByteBuffer readRawBlock() throws BitcoinBlockReadException, IOException { boolean readBlock = false; byte[] magicNo = new byte[4]; byte[] blockSizeByte = new byte[4]; long blockSize = 0; while (readBlock == false) { // in case of filtering by magic no we skip blocks until we reach a valid magicNo or end of Block // check if more to read if (this.bin.available() < 1) { return null; }/*from w w w . j a v a2 s. c o m*/ // mark bytestream so we can peak into it this.bin.mark(8); // read magic int magicNoReadSize = this.bin.read(magicNo, 0, 4); if (magicNoReadSize != 4) return null; // no more magics to read // read blocksize int blockSizeReadSize = this.bin.read(blockSizeByte, 0, 4); if (blockSizeReadSize != 4) return null; // no more size to read blockSize = BitcoinUtil.getSize(blockSizeByte) + 8; // read the full block this.bin.reset(); //filter by magic numbers? if (filterSpecificMagic == true) { for (int i = 0; i < specificMagicByteArray.length; i++) { byte[] currentFilter = specificMagicByteArray[i]; boolean doesMatchOneMagic = BitcoinUtil.compareMagics(currentFilter, magicNo); // correspond to filter? read it! if (doesMatchOneMagic == true) { readBlock = true; break; } } if (readBlock == false) { // skip it // Skip block this.bin.reset(); this.bin.skip(blockSize); } } else { readBlock = true; } } // check if it is larger than maxsize, include 8 bytes for the magic and size header blockSize = BitcoinUtil.getSize(blockSizeByte) + 8; if (blockSize == 0) throw new BitcoinBlockReadException("Error: Blocksize too small"); if (blockSize < 0) throw new BitcoinBlockReadException( "Error: This block size cannot be handled currently (larger then largest number in positive signed int)"); if (blockSize > this.maxSizeBitcoinBlock) throw new BitcoinBlockReadException( "Error: Block size is larger then defined in configuration - Please increase it if this is a valid block"); // read full block into ByteBuffer int blockSizeInt = new Long(blockSize).intValue(); byte[] fullBlock = new byte[blockSizeInt]; int readByte = 0; int totalByteRead = 0; while ((readByte = this.bin.read(fullBlock, totalByteRead, blockSizeInt - totalByteRead)) > -1) { totalByteRead += readByte; if (totalByteRead >= blockSize) break; } if (totalByteRead != blockSize) throw new BitcoinBlockReadException("Error: Could not read full block"); ByteBuffer result = null; if (this.useDirectBuffer == false) { result = ByteBuffer.wrap(fullBlock); } else { preAllocatedDirectByteBuffer.clear(); // clear out old bytebuffer preAllocatedDirectByteBuffer.limit(fullBlock.length); // limit the bytebuffer result = preAllocatedDirectByteBuffer; result.put(fullBlock); result.flip(); // put in read mode } result.order(ByteOrder.LITTLE_ENDIAN); return result; }
From source file:org.mycontroller.standalone.message.McMessageEngine.java
private void procressFirmwareRequest(McMessage mcMessage) { FirmwareRequest firmwareRequest = new FirmwareRequest(); try {/*from w w w.j av a 2 s . c om*/ firmwareRequest.setByteBuffer(ByteBuffer.wrap(Hex.decodeHex(mcMessage.getPayload().toCharArray())) .order(ByteOrder.LITTLE_ENDIAN), 0); _logger.debug("Firmware Request:[Type:{},Version:{},Block:{}]", firmwareRequest.getType(), firmwareRequest.getVersion(), firmwareRequest.getBlock()); boolean requestFirmwareReload = false; if (firmware == null) { requestFirmwareReload = true; } else if (firmware != null) { if (firmwareRequest.getBlock() == (firmware.getBlocks() - 1)) { requestFirmwareReload = true; } else if (firmwareRequest.getType() == firmware.getType().getId() && firmwareRequest.getVersion() == firmware.getVersion().getId()) { //Nothing to do just continue } else { requestFirmwareReload = true; } } else { requestFirmwareReload = true; } if (requestFirmwareReload) { firmware = DaoUtils.getFirmwareDao().get(firmwareRequest.getType(), firmwareRequest.getVersion()); _logger.debug("Firmware reloaded..."); } if (firmware == null) { _logger.debug("selected firmware type/version not available"); return; } FirmwareResponse firmwareResponse = new FirmwareResponse(); firmwareResponse.setByteBufferPosition(0); firmwareResponse.setBlock(firmwareRequest.getBlock()); firmwareResponse.setVersion(firmwareRequest.getVersion()); firmwareResponse.setType(firmwareRequest.getType()); StringBuilder builder = new StringBuilder(); int fromIndex = firmwareRequest.getBlock() * FirmwareUtils.FIRMWARE_BLOCK_SIZE; for (int index = fromIndex; index < fromIndex + FirmwareUtils.FIRMWARE_BLOCK_SIZE; index++) { builder.append(String.format("%02X", firmware.getData().get(index))); } if (firmwareRequest.getBlock() == 0) { firmware = null; _logger.debug("Firmware unloaded..."); } // Print firmware status in sensor logs if (firmwareRequest.getBlock() % FIRMWARE_PRINT_LOG == 0 || firmwareRequest.getBlock() == (firmware.getBlocks() - 1)) { //ResourcesLogs message data if (ResourcesLogsUtils.isLevel(LOG_LEVEL.INFO)) { this.setSensorOtherData(LOG_LEVEL.INFO, mcMessage, MESSAGE_TYPE_STREAM.ST_FIRMWARE_REQUEST.getText(), "Block No: " + firmwareRequest.getBlock()); } } mcMessage.setTxMessage(true); mcMessage.setSubType(MESSAGE_TYPE_STREAM.ST_FIRMWARE_RESPONSE.getText()); mcMessage .setPayload(Hex.encodeHexString(firmwareResponse.getByteBuffer().array()) + builder.toString()); McMessageUtils.sendToProviderBridge(mcMessage); _logger.debug("FirmwareRespone:[Type:{},Version:{},Block:{}]", firmwareResponse.getType(), firmwareResponse.getVersion(), firmwareResponse.getBlock()); // Print firmware status in sensor logs if (firmwareRequest.getBlock() % FIRMWARE_PRINT_LOG == 0 || firmwareRequest.getBlock() == (firmware.getBlocks() - 1)) { //ResourcesLogs message data if (ResourcesLogsUtils.isLevel(LOG_LEVEL.INFO)) { this.setSensorOtherData(LOG_LEVEL.INFO, mcMessage, MESSAGE_TYPE_STREAM.ST_FIRMWARE_RESPONSE.getText(), "Block No:" + firmwareRequest.getBlock()); } } } catch (DecoderException ex) { _logger.error("Exception, ", ex); } }
From source file:com.warfrog.bitmapallthethings.BattEngine.java
private InputStream generateBitmapHeader(int width, int height, int fileSize, int fillerBytes) { ByteBuffer buffer = ByteBuffer.allocate(54); buffer.order(ByteOrder.LITTLE_ENDIAN); buffer.put((byte) 0x42); //B buffer.put((byte) 0x4D); //M buffer.putInt(fileSize + 54); //total file size buffer.putInt(fileSize); //unofficial -- used to save the file size buffer.putInt(54); //pixel info offset buffer.putInt(40); //size of the bitmap info header buffer.putInt(width); //width buffer.putInt(height); //height buffer.putShort((short) 1); //number of color planes buffer.putShort((short) getBytesPerPixel()); //bytes per pixel buffer.putInt(0); //no compression buffer.putInt(fileSize); //size of the raw pixel array buffer.putInt(2835); //horizontal resolution buffer.putInt(2835); //vertical resolution buffer.putInt(0); //number of colors buffer.putInt(0); //important colors return new ByteArrayInputStream(buffer.array()); }
From source file:org.broadinstitute.gatk.utils.io.IOUtils.java
/** * Determines the uncompressed size of a GZIP file. Uses the GZIP ISIZE field in the last * 4 bytes of the file to get this information. * * @param gzipFile GZIP-format file whose uncompressed size to determine * @return The uncompressed size (in bytes) of the GZIP file */// w w w .ja va 2 s. c om public static int getGZIPFileUncompressedSize(File gzipFile) { if (gzipFile == null) { throw new ReviewedGATKException("GZIP file to examine was null"); } try { // The GZIP ISIZE field holds the uncompressed size of the compressed data. // It occupies the last 4 bytes of any GZIP file: RandomAccessFile in = new RandomAccessFile(gzipFile, "r"); in.seek(gzipFile.length() - 4); byte[] sizeBytes = new byte[4]; in.read(sizeBytes, 0, 4); ByteBuffer byteBuf = ByteBuffer.wrap(sizeBytes); byteBuf.order(ByteOrder.LITTLE_ENDIAN); // The GZIP spec mandates little-endian byte order int uncompressedSize = byteBuf.getInt(); // If the size read in is negative, we've overflowed our signed integer: if (uncompressedSize < 0) { throw new UserException.CouldNotReadInputFile(String.format( "Cannot accurately determine the uncompressed size of file %s " + "because it's either larger than %d bytes or the GZIP ISIZE field is corrupt", gzipFile.getAbsolutePath(), Integer.MAX_VALUE)); } return uncompressedSize; } catch (IOException e) { throw new UserException.CouldNotReadInputFile(gzipFile, e); } }
From source file:org.broadinstitute.sting.utils.io.IOUtils.java
/** * Determines the uncompressed size of a GZIP file. Uses the GZIP ISIZE field in the last * 4 bytes of the file to get this information. * * @param gzipFile GZIP-format file whose uncompressed size to determine * @return The uncompressed size (in bytes) of the GZIP file *//*from w w w . j a v a 2 s . c om*/ public static int getGZIPFileUncompressedSize(File gzipFile) { if (gzipFile == null) { throw new ReviewedStingException("GZIP file to examine was null"); } try { // The GZIP ISIZE field holds the uncompressed size of the compressed data. // It occupies the last 4 bytes of any GZIP file: RandomAccessFile in = new RandomAccessFile(gzipFile, "r"); in.seek(gzipFile.length() - 4); byte[] sizeBytes = new byte[4]; in.read(sizeBytes, 0, 4); ByteBuffer byteBuf = ByteBuffer.wrap(sizeBytes); byteBuf.order(ByteOrder.LITTLE_ENDIAN); // The GZIP spec mandates little-endian byte order int uncompressedSize = byteBuf.getInt(); // If the size read in is negative, we've overflowed our signed integer: if (uncompressedSize < 0) { throw new UserException.CouldNotReadInputFile(String.format( "Cannot accurately determine the uncompressed size of file %s " + "because it's either larger than %d bytes or the GZIP ISIZE field is corrupt", gzipFile.getAbsolutePath(), Integer.MAX_VALUE)); } return uncompressedSize; } catch (IOException e) { throw new UserException.CouldNotReadInputFile(gzipFile, e); } }
From source file:au.org.ala.layers.intersect.Grid.java
public void getClassInfo(Map<Float, float[]> info) { long length = ((long) nrows) * ((long) ncols); RandomAccessFile afile = null; File f2 = new File(filename + ".GRI"); try { //read of random access file can throw an exception if (!f2.exists()) { afile = new RandomAccessFile(filename + ".gri", "r"); } else {/*from w ww. jav a2 s. co m*/ afile = new RandomAccessFile(filename + ".GRI", "r"); } byte[] b = new byte[65536]; long i = 0; long max = 0; long len; float v; float ndv = (float) nodatavalue; while ((len = afile.read(b)) > 0) { ByteBuffer bb = ByteBuffer.wrap(b); if (byteorderLSB) { bb.order(ByteOrder.LITTLE_ENDIAN); } if (datatype.equalsIgnoreCase("UBYTE")) { max += len; max = Math.min(max, length); for (; i < max; i++) { v = bb.get(); if (v < 0) v += 256; if (v != ndv) updatesStats(info, i, v * rescale); } } else if (datatype.equalsIgnoreCase("BYTE")) { max += len; max = Math.min(max, length); for (; i < max; i++) { v = bb.get(); if (v != ndv) updatesStats(info, i, v * rescale); } } else if (datatype.equalsIgnoreCase("SHORT")) { max += len / 2; max = Math.min(max, length); for (; i < max; i++) { v = bb.getShort(); if (v != ndv) updatesStats(info, i, v * rescale); } } else if (datatype.equalsIgnoreCase("INT")) { max += len / 4; max = Math.min(max, length); for (; i < max; i++) { v = bb.getInt(); if (v != ndv) updatesStats(info, i, v * rescale); } } else if (datatype.equalsIgnoreCase("LONG")) { max += len / 8; max = Math.min(max, length); for (; i < max; i++) { v = bb.getLong(); if (v != ndv) updatesStats(info, i, v * rescale); } } else if (datatype.equalsIgnoreCase("FLOAT")) { max += len / 4; max = Math.min(max, length); for (; i < max; i++) { v = bb.getFloat(); if (v != ndv) updatesStats(info, i, v * rescale); } } else if (datatype.equalsIgnoreCase("DOUBLE")) { max += len / 8; max = Math.min(max, length); for (; i < max; i++) { v = (float) bb.getDouble(); if (v != ndv) updatesStats(info, i, v * rescale); } } else { max += len / 4; for (; i < max; i++) { // should not happen; catch anyway... } } } } catch (Exception e) { logger.error("An error has occurred getting grid class stats", e); } finally { if (afile != null) { try { afile.close(); } catch (Exception e) { logger.error(e.getMessage(), e); } } } }
From source file:org.mycontroller.standalone.mysensors.MySensorsMessageEngine.java
private void processFirmwareConfigRequest(MySensorsRawMessage mySensorsRawMessage) { FirmwareConfigRequest firmwareConfigRequest = new FirmwareConfigRequest(); try {/* w w w . j a v a 2s . com*/ firmwareConfigRequest .setByteBuffer(ByteBuffer.wrap(Hex.decodeHex(mySensorsRawMessage.getPayload().toCharArray())) .order(ByteOrder.LITTLE_ENDIAN), 0); boolean bootLoaderCommand = false; Firmware firmware = null; //Check firmware is configured for this particular node Node node = DaoUtils.getNodeDao().get(mySensorsRawMessage.getGatewayId(), mySensorsRawMessage.getNodeEui()); if (node != null && node.getEraseConfig() != null && node.getEraseConfig()) { bootLoaderCommand = true; _logger.debug("Erase EEPROM has been set..."); } else if (node != null && node.getFirmware() != null) { firmware = DaoUtils.getFirmwareDao().getById(node.getFirmware().getId()); _logger.debug("Firmware selected based on node configuration..."); } else if (firmwareConfigRequest.getType() == 65535 && firmwareConfigRequest.getVersion() == 65535) { if (ObjectFactory.getAppProperties().getMySensorsSettings().getDefaultFirmware() != null) { firmware = DaoUtils.getFirmwareDao() .getById(ObjectFactory.getAppProperties().getMySensorsSettings().getDefaultFirmware()); } else { _logger.warn("There is no default firmware set!"); } } else { firmware = DaoUtils.getFirmwareDao().get(firmwareConfigRequest.getType(), firmwareConfigRequest.getVersion()); } FirmwareConfigResponse firmwareConfigResponse = new FirmwareConfigResponse(); firmwareConfigResponse.setByteBufferPosition(0); if (bootLoaderCommand) {//If it is bootloader command if (node.getEraseConfig() != null && node.getEraseConfig()) { firmwareConfigResponse.loadEraseEepromCommand(); node.setEraseConfig(false); //Remove erase EEPROM flag and update in to database DaoUtils.getNodeDao().update(node); } else { _logger.warn("Selected booloader command is not available, FirmwareConfigRequest:[{}]", firmwareConfigRequest); return; } } else if (firmware == null) {//Non bootloader command if (ObjectFactory.getAppProperties().getMySensorsSettings().getEnbaledDefaultOnNoFirmware()) { _logger.debug( "If requested firmware is not available, redirect to default firmware is set, Checking the default firmware"); if (ObjectFactory.getAppProperties().getMySensorsSettings().getDefaultFirmware() != null) { firmware = DaoUtils.getFirmwareDao().getById( ObjectFactory.getAppProperties().getMySensorsSettings().getDefaultFirmware()); _logger.debug("Default firmware:[{}]", firmware.getFirmwareName()); } else { _logger.warn("There is no default firmware set!"); } } //Selected, default: No firmware available for this request if (firmware == null) { _logger.warn("Selected Firmware is not available, FirmwareConfigRequest:[{}]", firmwareConfigRequest); return; } } if (firmware != null) { firmwareConfigResponse.setType(firmware.getType().getId()); firmwareConfigResponse.setVersion(firmware.getVersion().getId()); firmwareConfigResponse.setBlocks(firmware.getBlocks()); firmwareConfigResponse.setCrc(firmware.getCrc()); } mySensorsRawMessage.setTxMessage(true); mySensorsRawMessage.setSubType(MESSAGE_TYPE_STREAM.ST_FIRMWARE_CONFIG_RESPONSE.ordinal()); mySensorsRawMessage .setPayload(Hex.encodeHexString(firmwareConfigResponse.getByteBuffer().array()).toUpperCase()); ObjectFactory.getRawMessageQueue().putMessage(mySensorsRawMessage.getRawMessage()); _logger.debug("FirmwareConfigRequest:[{}]", firmwareConfigRequest); _logger.debug("FirmwareConfigResponse:[{}]", firmwareConfigResponse); } catch (DecoderException ex) { _logger.error("Exception, ", ex); } }