Search Results
Search found 14467 results on 579 pages for 'rajeev y ranjan oracle'.
Page 523/579 | < Previous Page | 519 520 521 522 523 524 525 526 527 528 529 530 | Next Page >
-
-
Test JPQL with NetBeans IDE 7.3 Tools
- by Geertjan
Since I pretty much messed up this part of the "Unlocking Java EE 6 Platform" demo, which I did together with PrimeFaces lead Çagatay Çivici during JavaOne 2012, I feel obliged to blog about it to clarify what should have happened! In my own defense, I only learned about this feature 15 minutes before the session started. In 7.3 Beta, it works for Java SE projects, while for Maven-based web projects, you need a post 7.3 Beta build, which is what I set up for my demo right before it started. Then I saw that the feature was there, without actually trying it out, which resulted in that part of the demo being a bit messy. And thanks to whoever it was in the audience who shouted out how to use it correctly! Screenshots below show everything related to this new feature, available from 7.3 onwards, which means you can try out your JPQL queries right within the IDE, without deploying the application (you only need to build it since the queries are run on the compiled classes): SQL view: Result view for the above: Here, you see the result of a more specific query, i.e., check that a record with a specific name value is present in the database: Also note that there is code completion within the editor part of the dialog above. I.e., as you press Ctrl-Space, you'll see context-sensitive suggestions for filling out the query. All this is pretty cool stuff! Saves time because now there's no need to deploy the app to check the database connection.Read the article
-
Visual View for Schema Based Editor
- by Geertjan
Starting from yesterday's blog entry, make the following change in the DataObject's constructor: registerEditor("text/x-sample+xml", true); I.e., the MultiDataObject.registerEditor method turns the editor into a multiview component. Now, again, within the DataObject, add the following, to register a source editor in the multiview component: @MultiViewElement.Registration( displayName = "#LBL_Sample_Source", mimeType = "text/x-sample+xml", persistenceType = TopComponent.PERSISTENCE_NEVER, preferredID = "ShipOrderSourceView", position = 1000) @NbBundle.Messages({ "LBL_Sample_Source=Source" }) public static MultiViewElement createEditor(Lookup lkp){ return new MultiViewEditorElement(lkp); } Result: Next, let's create a visual editor in the multiview component. This could be within the same module as the above or within a completely separate module. That makes it possible for external contributors to provide modules with new editors in an existing multiview component: @MultiViewElement.Registration(displayName = "#LBL_Sample_Visual", mimeType = "text/x-sample+xml", persistenceType = TopComponent.PERSISTENCE_NEVER, preferredID = "VisualEditorComponent", position = 500) @NbBundle.Messages({ "LBL_Sample_Visual=Visual" }) public class VisualEditorComponent extends JPanel implements MultiViewElement { public VisualEditorComponent() { initComponents(); } @Override public String getName() { return "VisualEditorComponent"; } @Override public JComponent getVisualRepresentation() { return this; } @Override public JComponent getToolbarRepresentation() { return new JToolBar(); } @Override public Action[] getActions() { return new Action[0]; } @Override public Lookup getLookup() { return Lookup.EMPTY; } @Override public void componentOpened() { } @Override public void componentClosed() { } @Override public void componentShowing() { } @Override public void componentHidden() { } @Override public void componentActivated() { } @Override public void componentDeactivated() { } @Override public UndoRedo getUndoRedo() { return UndoRedo.NONE; } @Override public void setMultiViewCallback(MultiViewElementCallback callback) { } @Override public CloseOperationState canCloseElement() { return CloseOperationState.STATE_OK; } } Result: Next, the DataObject is automatically returned from the Lookup of DataObject. Therefore, you can go back to your visual editor, add a LookupListener, listen for DataObjects, parse the underlying XML file, and display values in GUI components within the visual editor.Read the article
-
Restoring OutlineView Changes
- by Geertjan
Spent the last afternoons working with Ruben Hinojo, who I met recently at the Tinkerforge/NetBeans integration course in Germany. He's Spanish, lives in Scotland, and joined the course by flying from Edinburgh to Amsterdam and then driving from there to the course in Germany. Since then he spent some days in Amsterdam and we've been working a bit in a cafe in Amsterdam. He's working freelance on a freight management system on the NetBeans Platform and here's a pic of him and his application: I showed him a few things to improve the initial appearance of the application, such as removing the unneeded tab in the editor position and displaying data at startup so that the main window isn't empty initially. He, in turn, told me about something I didn't know about, where "freightViewer" below is an OutlineView: void writeProperties(java.util.Properties p) { // better to version settings since initial version as advocated at // http://wiki.apidesign.org/wiki/PropertyFiles p.setProperty("version", "1.0"); freightViewer.writeSettings(p, "FreightViewer"); } void readProperties(java.util.Properties p) { String version = p.getProperty("version"); freightViewer.readSettings(p, "FreightViewer"); } The "OutlineView.read/writeSettings" enables you to save/restore changes to an OutlineView, e.g., column width, column position, and which columns are displayed/hidden. In the user dir, within the .settings file of the TopComponent (in config/Windows2Local/Components), you'll then find content like this, where the "FreightViewer" argument above is now the prefix of the name of each property element: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE properties PUBLIC "-//org.ruben.viewer//RubenViewer//EN" "http://www.netbeans.org/dtds/properties-1_0.dtd"> <properties> <property name="FreightViewerOutlineViewOutlineColumn-1-shortDescription" value="Type"/> <property name="FreightViewerETableColumn-1-HeaderValue" value="Type"/> <property name="FreightViewerColumnsNumber" value="3"/> <property name="FreightViewerETableColumn-0-PreferredWidth" value="75"/> <property name="FreightViewerETableColumn-2-HeaderValue" value="Description"/> <property name="version" value="1.0"/> <property name="FreightViewerETableColumn-2-SortRank" value="0"/> <property name="FreightViewerETableColumn-2-Width" value="122"/> <property name="FreightViewerETableColumn-0-ModelIndex" value="0"/> <property name="FreightViewerETableColumn-1-Width" value="123"/> <property name="FreightViewerHiddenColumnsNumber" value="0"/> <property name="FreightViewerETableColumn-0-SortRank" value="0"/> <property name="FreightViewerETableColumn-1-ModelIndex" value="1"/> <property name="FreightViewerETableColumn-1-PreferredWidth" value="75"/> <property name="FreightViewerETableColumn-0-Ascending" value="true"/> <property name="FreightViewerETableColumn-2-ModelIndex" value="2"/> <property name="FreightViewerETableColumn-1-Ascending" value="true"/> <property name="FreightViewerETableColumn-2-PreferredWidth" value="75"/> <property name="FreightViewerETableColumn-1-SortRank" value="0"/> <property name="FreightViewerETableColumn-0-HeaderValue" value="Nodes"/> <property name="FreightViewerETableColumn-2-Ascending" value="true"/> <property name="FreightViewerETableColumn-0-Width" value="122"/> <property name="FreightViewerOutlineViewOutlineColumn-2-shortDescription" value="Description"/> </properties> NB: However, note as described in this issue, i.e., since 7.2, hiding a column isn't persisted and in fact causes problems. I replaced the org-openide-explorer.jar with a previous one, from 7.1.1, and then the problem was solved. But now the enhancements in the OutlineView since 7.2 are no longer present, of course. So, looking forward to seeing this problem fixed.Read the article
-
reminder - HFM Webcast tomorrow
- by THE
This is the last reminder: Tomorrow we will have the Advisor Webcast about new features in HFM. Do not miss this one. Greg and Tanya have put together a nice set of Demonstrations of the new features, so this one will be low on the powerpoint footprint and more about - "look what this new thing does". You can find more details in this post or visit the "Advisor Webcast Current Schedule" on MOS.Read the article
-
Remote Diagnostic Agent (RDA) version 4.30
- by inowodwo
posted by Maurice Bauhahn Remote Diagnostic Agent (RDA) version 4.30 was released on December 11th A free download can be accessed via Knowledge Management article 314422.1 and installed in any Enterprise Performance Management 11.1.2.x environment. EPM-specific instructions are available in Knowledge Management article 1304885.1. This RDA version incorporates two new modules (EAS=Essbase Administration Services; HWA=Hyperion Web Analysis) and improvements in modules and profiles relating to twelve other Hyperion applications (EPM, EPMA, ESS, FCM, HFM, HFR, HIR, HPL, HPSV, HSS, PR, and HSV). To follow best practice, run related RDA profiles [for example: "perl rda.pl -vnSCRPp Hyperion1112_EAS"] and attach the output zip file [by default in \rda\output\] to your service requests. The comprehensive set of details provided in such output files should help technicians to avoid delays in handling service requests (by avoiding ping-pong communications resulting from repeated requests for additional values).Read the article
-
Advanced Experiments with JavaScript, CSS, HTML, JavaFX, and Java
- by Geertjan
Once you're embedding JavaScript, CSS, and HTML into your Java desktop application, via the JavaFX browser, a whole range of new possibilities open up to you. For example, here's an impressive page on-line, notice that you can drag items and drop them in new places: http://nettuts.s3.amazonaws.com/127_iNETTUTS/demo/index.html The source code of the above is provided too, so you can drop the various files directly into your NetBeans module and use the JavaFX WebEngine to load the HTML page into the JavaFX browser. Once the JavaFX browser is in a NetBeans TopComponent, you'll have the start of an off-line news composer, something like this: WebView view = new WebView(); view.setMinSize(widthDouble, heightDouble); view.setPrefSize(widthDouble, heightDouble); webengine = view.getEngine(); URL url = getClass().getResource("index.html"); webengine.load(url.toExternalForm()); webengine.getLoadWorker().stateProperty().addListener( new ChangeListener() { @Override public void changed(ObservableValue ov, State oldState, State newState) { if (newState == State.SUCCEEDED) { Document document = (Document) webengine.executeScript("document"); NodeList list = document.getElementById("columns").getChildNodes(); for (int i = 0; i < list.getLength(); i++) { EventTarget et = (EventTarget) list.item(i); et.addEventListener("click", new EventListener() { @Override public void handleEvent(Event evt) { instanceContent.add(new Date()); } }, true); } } } }); The above is the code showing how, whenever a news item is clicked, the current date can be published into the Lookup. As you can see, I have a viewer component listening to the Lookup for dates.Read the article
-
New ADF Desktop Integration Page
All the resources for office integration in one placeRead the article
-
At the Java DEMOgrounds - ZeroTurnaround and its LiveRebel 2.5
- by Janice J. Heiss
At the ZeroTurnaround demo, I spoke with Krishnan Badrinarayanan, their Product Marketing Manager. ZeroTurnaround, the creator of JRebel and LiveRebel, describes itself on their site as a company “dedicated to changing the way the world develops, tests and runs Java applications."“We just launched LiveRebel 2.5 today,” stated Badrinarayanan, “which enables companies to embrace the concept and practice of continuous delivery, which means having a pipeline that takes products right from the developers to an end-user, faster, more frequently -- all the while ensuring that it’s a quality product that does not break in production. So customers don’t feel the discontinuity that something has changed under them and that they can’t deal with the change. And all this happens while there is zero down time.”He pointed out that Salesforce.com is not useable from 3 a.m. to 5 a.m. on Saturday because they are engaged in maintenance. “With LiveRebel 2.5, you can unify the whole delivery chain without having any downtime at all,” he said. “There are many products that tell customers to take their tools and change how they work as an organization so that you they have to conform to the way the tool prescribes them to work as an application team. We take a more pragmatic approach. A lot of companies might use Jenkins or Bamboo to do continuous integration. We extend that. We say, take our product, take LiveRebel okay, and integrate it with Jenkins – you can do that quickly, so that, in half a day, you will be up and running. And let LiveRebel automate your deployment processes and all the automated tasks that go with it. Right from tests to the staging environment to production -- all with zero downtime and with no impact on users currently using the system.” “So if you were to make the update right now and you had 100 users on your system, they would not even know this was happening. It would maintain their sessions and transfer them over to the new version, all in the background.”Read the article
-
Enhancing Enterprise Planning and Forecasting Through Predictive Modeling
Planning and forecasting performance in today's volatile economic environment can be challenging with traditional planning applications and manual modeling techniques. To address these challenges, leading edge companies are leveraging predictive modeling to bring statistical analysis and techniques such as Monte Carlo simulations into the mix. Sound too math-intense and complicated? Not anymore. These techniques can be applied by anyone - no prior stats experience required - whether to augment the forecasting performed by line managers or to validate those forecasts based on historical information, and to produce a broader range of scenarios to consider in decision-making.Read the article
-
JSR Updates
- by heathervc
JSR 349, Bean Validation 1.1, has published a Public Review. The review closes on 12 November. JSR 331, Constraint Programming API, has published a Maintenance Release. JSR 335, Lambda Expressions for the Java Programming Language, has moved to JCP 2.8! Check out their java.net project. JSR 107, JCACHE - Java Temporary Caching API, has posted their Early Draft Release. The review closes on 22 November.Read the article
-
ADF Desktop Integration Component and Feature Demo
ADF and Excel working togetherRead the article
-
Groovy support in Java EE projects
- by Martin Janicek
As requested in the issue 144038, I've implemented support for Groovy in a Java enterprise projects. You should be able to combine Java/Groovy files, run them and thanks to the new Groovy JUnit tests support you can also run groovy tests together with your existing Java tests. I hope it will make your enterprise development (and especially enterprise testing) easier and more productive. Note: The changes will be propagated to the NetBeans daily build in a few days, so please stay in touch!Read the article
-
What's New in E-Business HCM Release 12?
Listen to Gretchen Alarcon, Vice President of Product Strategy for HCM, discuss the latest enhancements in E-Business HCM R12 and how they address business pain points today.Read the article
-
Wanted Now: Your Feedback on Java EE 7!
- by reza_rahman
Work on Java EE 7 presses on under JSR 342. Things are shaping up nicely and Java EE 7 is now in the Early Draft Review stage. You can find out more and get involved by visiting the Java.net project for Java EE. There are now a number of important open issues that the Java EE expert group would like to get broad community feeback on. These issues include what new JSRs to add to the Java EE Full/Web Profile as well as how to better align CDI with Java EE. Help shape the future and voice your opinion on these critical open issues by taking the short survey posted here.Read the article
-
All Secure - "Need to Know"
Getting better information is important, but some secrets are not for sharing.Read the article
-
HTML Manifest for Content Folios
- by Kyle Hatlestad
I recently worked on a project to create a custom content folio renderer in WebCenter Content. It needed to output the native files in the folio along with a manifest file in HTML format which would list the contents of the folio along with any designated metadata and a relative link to the file within the download. This way a person could hand someone the folio download and it would be a self-contained package with all of the content and a single file to display the information on the contents. The default Zip rendition of the folio will output the web-viewable version of the file with an HDA formatted file for each one. And unless you are fluent in HDA or have a tool to read them, they are difficult to consume. [Read More]Read the article
-
HTML Manifest for Content Folios
- by Kyle Hatlestad
I recently worked on a project to create a custom content folio renderer in WebCenter Content. It needed to output the native files in the folio along with a manifest file in HTML format which would list the contents of the folio along with any designated metadata and a relative link to the file within the download. This way a person could hand someone the folio download and it would be a self-contained package with all of the content and a single file to display the information on the contents. The default Zip rendition of the folio will output the web-viewable version of the file with an HDA formatted file for each one. And unless you are fluent in HDA or have a tool to read them, they are difficult to consume. I thought this might be useful for others, so I'm posting a copy of the component here. Beyond the standard instructions for installing a component, there is an environment configuration file (folionativezipwithmanifestrenderer_environment.cfg) which has a couple of options. FolioMetadataManifestList - This is a comma separated list of metadata fields (system or custom) that should be included in the manifest file. FolioMetadataManifestUseOriginalFilename - (True or False) If set to True, the filenames in the zip file will be based on the original filename as it was checked into WebCenter Content. If False, it will use the 'Name' of the item as defined within the Folio. This is usually the Title of the item. The component also includes the source code, so feel free to use this as a reference for creating other interesting folios.Read the article
-
Java EE Basic Training with Yakov Fain
- by reza_rahman
Those of us that have been around Java/Java EE for a little while sometimes tend to forget that Java is still an ever expanding ecosystem with many newcomers. Fortunately, not everyone misses this perspective, including well-respected Java veteran Yakov Fain. Yakov recently started a free online video tutorial series focused on Java and Java EE for absolute beginners. The first few parts of the series focused on Java SE but now Yakov is beginning to cover the very basics of Java EE. In a recent video he covered: The basics of the JCP, JSRs and Java EE How to get started with GlassFish 4 The basics of Servlets Developing Java EE/Servlets using Eclipse and GlassFish The excellent video is posted below. The slides for the tutorial series generally are available here. If there are folks you know that would benefit from this content, please do pass on word. Even if you are an experienced developer, it sometimes helps to sit back and review the basics... It's quite remarkable that someone of Yakov's stature took the time out to create content for absolute beginners. For those unaware, Yakov is one of the earliest Java champions and one would be very hard pressed to match his many contributions to the Java community. The tutorial demonstrates his continued passion, commitment and humility.Read the article
-
Deadlock Analysis in NetBeans 8
- by Geertjan
Lock contention profiling is very important in multi-core environments. Lock contention occurs when a thread tries to acquire a lock while another thread is holding it, forcing it to wait. Lock contentions result in deadlocks. Multi-core environments have even more threads to deal with, causing an increased likelihood of lock contentions. In NetBeans 8, the NetBeans Profiler has new support for displaying detailed information about lock contention, i.e., the relationship between the threads that are locked. After all, whenever there's a deadlock, in any aspect of interaction, e.g., a political deadlock, it helps to be able to point to the responsible party or, at least, the order in which events happened resulting in the deadlock. As an example, let's take the handy Deadlock sample code from the Java Tutorial and look at the tools in NetBeans IDE for identifying and analyzing the code. The description of the deadlock is nice: Alphonse and Gaston are friends, and great believers in courtesy. A strict rule of courtesy is that when you bow to a friend, you must remain bowed until your friend has a chance to return the bow. Unfortunately, this rule does not account for the possibility that two friends might bow to each other at the same time. To help identify who bowed first or, at least, the order in which bowing took place, right-click the file and choose "Profile File". In the Profile Task Manager, make the choices below: When you have clicked Run, the Threads window shows the two threads are blocked, i.e., the red "Monitor" lines tell you that the related threads are blocked while trying to enter a synchronized method or block: But which thread is holding the lock? Which one is blocked by the other? The above visualization does not answer these questions. New in NetBeans 8 is that you can analyze the deadlock in the new Lock Contention window to determine which of the threads is responsible for the lock: Here is the code that simulates the lock, very slightly tweaked at the end, where I use "setName" on the threads, so that it's even easier to analyze the threads in the relevant NetBeans tools. Also, I converted the anonymous inner Runnables to lambda expressions. package org.demo; public class Deadlock { static class Friend { private final String name; public Friend(String name) { this.name = name; } public String getName() { return this.name; } public synchronized void bow(Friend bower) { System.out.format("%s: %s" + " has bowed to me!%n", this.name, bower.getName()); bower.bowBack(this); } public synchronized void bowBack(Friend bower) { System.out.format("%s: %s" + " has bowed back to me!%n", this.name, bower.getName()); } } public static void main(String[] args) { final Friend alphonse = new Friend("Alphonse"); final Friend gaston = new Friend("Gaston"); Thread t1 = new Thread(() -> { alphonse.bow(gaston); }); t1.setName("Alphonse bows to Gaston"); t1.start(); Thread t2 = new Thread(() -> { gaston.bow(alphonse); }); t2.setName("Gaston bows to Alphonse"); t2.start(); } } In the above code, it's extremely likely that both threads will block when they attempt to invoke bowBack. Neither block will ever end, because each thread is waiting for the other to exit bow. Note: As you can see, it really helps to use "Thread.setName", everywhere, wherever you're creating a Thread in your code, since the tools in the IDE become a lot more meaningful when you've defined the name of the thread because otherwise the Profiler will be forced to use thread names like "thread-5" and "thread-6", i.e., based on the order of the threads, which is kind of meaningless. (Normally, except in a simple demo scenario like the above, you're not starting the threads in the same class, so you have no idea at all what "thread-5" and "thread-6" mean because you don't know the order in which the threads were started.) Slightly more compact: Thread t1 = new Thread(() -> { alphonse.bow(gaston); },"Alphonse bows to Gaston"); t1.start(); Thread t2 = new Thread(() -> { gaston.bow(alphonse); },"Gaston bows to Alphonse"); t2.start();Read the article
-
Java Embedded @ JavaOne coming soon...
- by hinkmond
The "Internet of Things" is coming your way to the Java Embedded sub-conference at JavaOne 2012 next week: Oct. 3 - Oct. 4 in San Francisco. Get ready to learn how Java Embedded technologies and solutions offer compelling value. See: Java Embedded @ JavaOne Here's a quote: The conference is designed to provide business and technical decision makers, as well as Java embedded ecosystem partners, with a unique opportunity to meet together and learn about how they can use Java embedded technologies to enable new business strategies. It's the place to be for Java Embedded techies. HinkmondRead the article
-
TopComponent, Node, Lookup, Palette, and Visual Library
- by Geertjan
Here's a small example that puts together several pieces in the context of a NetBeans Platform application, i.e., TopComponent, Node, Lookup, Palette, and Visual Library: http://java.net/projects/nb-api-samples/sources/api-samples/show/versions/7.2/misc/CensusDesigner The result is a drag-and-drop user interface, i.e., drag items from the palette and drop them onto the window, that's all it does, nothing too fancy, just puts the basic NetBeans Platform pieces together in a pretty standard combination:Read the article
-
Project Time Tracker
- by Geertjan
Based on yesterday's blog entry, let's do something semi useful and display, in the project popup, which is available when you right-click a project in the Projects window, the time since the last change was made anywhere in the project, i.e., we can listen recursively to any changes done within a project and then update the popup with the newly acquired information, dynamically: import java.awt.event.ActionEvent; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.List; import javax.swing.AbstractAction; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.awt.ActionRegistration; import org.openide.awt.StatusDisplayer; import org.openide.filesystems.FileAttributeEvent; import org.openide.filesystems.FileChangeListener; import org.openide.filesystems.FileEvent; import org.openide.filesystems.FileRenameEvent; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; import org.openide.util.Utilities; import org.openide.util.WeakListeners; @ActionID( category = "Demo", id = "org.ptt.TrackProjectSelectionAction") @ActionRegistration( lazy = false, displayName = "NOT-USED") @ActionReference( path = "Projects/Actions", position = 0) public final class TrackProjectSelectionAction extends AbstractAction implements LookupListener, FileChangeListener { private Lookup.Result<Project> projects; private Project context; private Long startTime; private Long changedTime; private DateFormat formatter; private List<Project> timedProjects; public TrackProjectSelectionAction() { putValue("popupText", "Timer"); formatter = new SimpleDateFormat("HH:mm:ss"); timedProjects = new ArrayList<Project>(); projects = Utilities.actionsGlobalContext().lookupResult(Project.class); projects.addLookupListener( WeakListeners.create(LookupListener.class, this, projects)); resultChanged(new LookupEvent(projects)); } @Override public void resultChanged(LookupEvent le) { Collection<? extends Project> allProjects = projects.allInstances(); if (allProjects.size() == 1) { Project currentProject = allProjects.iterator().next(); if (!timedProjects.contains(currentProject)) { String currentProjectName = ProjectUtils.getInformation(currentProject).getDisplayName(); putValue("popupText", "Start Timer for Project: " + currentProjectName); StatusDisplayer.getDefault().setStatusText( "Current Project: " + currentProjectName); timedProjects.add(currentProject); context = currentProject; } } } @Override public void actionPerformed(ActionEvent e) { refresh(); } protected void refresh() { startTime = System.currentTimeMillis(); String formattedStartTime = formatter.format(startTime); putValue("popupText", "Timer started: " + formattedStartTime + " (" + ProjectUtils.getInformation(context).getDisplayName() + ")"); } @Override public void fileChanged(FileEvent fe) { changedTime = System.currentTimeMillis(); formatter = new SimpleDateFormat("mm:ss"); String formattedLapse = formatter.format(changedTime - startTime); putValue("popupText", "Time since last change: " + formattedLapse + " (" + ProjectUtils.getInformation(context).getDisplayName() + ")"); startTime = changedTime; } @Override public void fileFolderCreated(FileEvent fe) {} @Override public void fileDataCreated(FileEvent fe) {} @Override public void fileDeleted(FileEvent fe) {} @Override public void fileRenamed(FileRenameEvent fre) {} @Override public void fileAttributeChanged(FileAttributeEvent fae) {} } Some more work needs to be done to complete the above, i.e., for each project you somehow need to maintain the start time and last change and redisplay that whenever the user right-clicks the project.Read the article
-
GlassFish Party@JavaOne Latin America
- by reza_rahman
As many of you know, we've had the GlassFish party at JavaOne San Francisco for a number of years now. It's always a great opportunity to rub elbows with some key members of the GlassFish team, Java community leaders and Java EE/GlassFish enthusiasts. We are now extending that great tradition for the first time to JavaOne Latin America! Come join us for free food, beer and caipirinhas at the Tribeca Pub in Sao Paulo on Tuesday, December 4 from 8:00 PM to 10:00 PM. Read the details and sign up here.Read the article
-
Showing an Action on a TopComponent Node
- by Geertjan
Let's say you want to extend the tools in NetBeans IDE, specifically for TopComponents. When the user right-clicks in the Projects window (or Files window or Favorites window) on a Java class that extends TopComponent, a menu item should be available for branding the TopComponent. What "branding" entails is, at this stage, a secondary question. The primary question, from an implementation point of view, is "how do I create an action that is only shown when the user right-clicks on a TopComponent?" Here's the solution, in NetBeans IDE 7.2 (the "lazy" attribute, here set to false, is new in 7.2): import com.sun.source.tree.ClassTree; import com.sun.source.util.TreePathScanner; import java.awt.event.ActionEvent; import java.io.IOException; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JOptionPane; import org.netbeans.api.java.source.CompilationController; import org.netbeans.api.java.source.CompilationInfo; import org.netbeans.api.java.source.JavaSource; import org.netbeans.api.java.source.JavaSource.Phase; import org.netbeans.api.java.source.Task; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; import org.openide.awt.ActionReferences; import org.openide.awt.ActionRegistration; import org.openide.awt.DynamicMenuContent; import org.openide.loaders.DataObject; import org.openide.util.ContextAwareAction; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle.Messages; import org.openide.util.Utilities; @ActionID( category = "Tools", id = "org.tc.customizer.BrandTopComponentAction") @ActionRegistration( displayName = "#CTL_BrandTopComponentAction", lazy = false) @ActionReferences({ @ActionReference(path = "Loaders/text/x-java/Actions", position = 150) }) @Messages("CTL_BrandTopComponentAction=Brand") public final class BrandTopComponentAction extends AbstractAction implements ContextAwareAction { private final DataObject dobj; public BrandTopComponentAction() { this(Utilities.actionsGlobalContext()); } public BrandTopComponentAction(Lookup context) { super(Bundle.CTL_BrandTopComponentAction()); this.dobj = context.lookup(DataObject.class); //Enable the menu item only if we're dealing with a TopComponent JavaSource javaSource = JavaSource.forFileObject(dobj.getPrimaryFile()); try { javaSource.runUserActionTask(new ScanForTopComponentTask(this), true); } catch (IOException ex) { Exceptions.printStackTrace(ex); } //Hide the menu item if it isn't enabled: putValue(DynamicMenuContent.HIDE_WHEN_DISABLED, true); } @Override public void actionPerformed(ActionEvent ev) { JOptionPane.showMessageDialog(null, "Hurray, I am a TopComponent!"); //Now add your code for showing a dialog, //where the dialog will display UI for branding the TopComponent somehow //and retrieve those branding values //and then change the TopComponent class accordingly. } @Override public Action createContextAwareInstance(Lookup actionContext) { return new BrandTopComponentAction(actionContext); } private static class ScanForTopComponentTask implements Task<CompilationController> { private final BrandTopComponentAction action; private ScanForTopComponentTask(BrandTopComponentAction action) { this.action = action; } @Override public void run(CompilationController compilationController) throws Exception { compilationController.toPhase(Phase.ELEMENTS_RESOLVED); new MemberVisitor(compilationController, action).scan( compilationController.getCompilationUnit(), null); } } private static class MemberVisitor extends TreePathScanner<Void, Void> { private CompilationInfo info; private final AbstractAction action; public MemberVisitor(CompilationInfo info, AbstractAction action) { this.info = info; this.action = action; } @Override public Void visitClass(ClassTree t, Void v) { Element el = info.getTrees().getElement(getCurrentPath()); if (el != null) { TypeElement te = (TypeElement) el; if (te.getSuperclass().toString().equals("org.openide.windows.TopComponent")){ action.setEnabled(true); } else { action.setEnabled(false); } } return null; } } } The code above is the result of combining various tutorials found on the NetBeans Platform Learning Trail.Read the article