@Override protected void doPaste(Object targetObject, Object[] sourceObjects) { // Get the model IBundleModel model = getBundleModel(); // Ensure the model is defined if (model == null) { return; } // Get the bundle IBundle bundle = model.getBundle(); // Paste all source objects for (Object sourceObject : sourceObjects) { if (sourceObject instanceof ExportPackageObject) { ExportPackageObject exportPackageObject = (ExportPackageObject) sourceObject; // Export package object // Adjust all the source object transient field values to // acceptable values exportPackageObject.reconnect(model, fHeader, getVersionAttribute()); // Add the object to the header if (fHeader == null) { // Export package header not defined yet // Define one // Value will get inserted into a new export package object // created by a factory // Value needs to be empty string so no export package // object is created as the initial value bundle.setHeader(getExportedPackageHeader(), ""); // $NON-NLS-1$ } // Add the export package to the header fHeader.addPackage(exportPackageObject); } } }
private void inspectBundle(IBundle bundle) { for (int i = 0; i < H_TOTAL; i++) { if (fSearchFor == S_FOR_TYPES && (i == H_IMP || i == H_EXP)) continue; IManifestHeader header = bundle.getManifestHeader(SEARCH_HEADERS[i]); if (header != null) { try { ManifestElement[] elements = ManifestElement.parseHeader(header.getName(), header.getValue()); if (elements == null) continue; for (int j = 0; j < elements.length; j++) { String value = null; Matcher matcher = null; if (fSearchFor == S_FOR_TYPES) { value = elements[j].getValue(); matcher = getMatcher(value); } if (value == null || (matcher != null && !matcher.matches())) { value = getProperValue(elements[j].getValue()); matcher = getMatcher(value); } if (matcher.matches()) { String group = matcher.group(0); int[] offlen; offlen = getOffsetOfElement(bundle, header, group); fSearchRequestor.reportMatch( new Match( bundle.getModel().getUnderlyingResource(), Match.UNIT_CHARACTER, offlen[0], offlen[1])); break; // only one package will be listed per header } } } catch (BundleException e) { } } } }
private int[] getOffsetOfElement(IBundle bundle, IManifestHeader header, String value) { int[] offlen = new int[] {0, 0}; IBundleModel model = bundle.getModel(); if (model instanceof IEditingModel) { IDocument pDoc = ((IEditingModel) model).getDocument(); int headerOffset = header.getOffset() + header.getName().length(); try { String headerString = pDoc.get(headerOffset, header.getLength() - header.getName().length()); int internalOffset = headerString.indexOf(value); if (internalOffset != -1) offlen[0] = headerOffset + internalOffset; else offlen[0] = headerOffset + header.getName().length() + header.getValue().indexOf(value); offlen[1] = value.length(); } catch (BadLocationException e) { } } return offlen; }