SO...Verizon Remote Diagnostics no longer needs your permission?

Oh, they can remotely view your phone, it's apps, settings, etc whenever.
I am on a chat with them right now and all of a sudden the rep comes back telling me that I had too many media files on my phone which made it slow saying, "I was able to look over your internal phone storage. The device storage is close to full which is causing the device to  operate slower than normal. The RAM On the device looks okay and is not impacting the device. To help operate the device and allow it to run faster, this would be freeing up space by removing some third party applications, pictures, music, video, call logs, text etc."
Oh yeah, they can get into it anytime they want.

Which phone do you have? Actually, I'd really like to know if this is an app that you installed?
I'm looking through my Kyocera Brigadier running KitKat 4.4.2 and I don't see anything by that name or close to that name. If this is something they have installed in the phone's ROM then I maybe rooting the phone will have to be considered?
I don't mind them connecting to my phone if I install an app that gives them permission but only if I installed it and gave them that permission. I think I have a reasonable expectation of privacy regarding the data on my phone. I have a couple of health records in my Documents folder that I hope are covered under the Federal HIPPA laws.
I started reading up on it when I saw the OP but I have nothing concrete. I believe Verizon would be considered an unauthorized 3rd party in regards to my PHI (Protected Health Information).
--Wesley

Similar Messages

  • Office Web Apps Issue - "Sorry, something went wrong" message when opening a document (any MS docx,ppt etc) in IE. With Chrome, it pops (Microsoft Office needs your permission) message and on RUN, it opens the document.

    When opening any Microsoft documents ( docx, ppt etc) in SharePoint 2013,
    Internet Explorer behavior : "Sorry, something went wrong" An unexpected error has occurred message and then nothing happens. 
    In Chrome : Pops (Microsoft Office needs your permission) message and on clicking RUN, it opens the document.
    In Firefox : the documents opens, after asking which application do you want to use to open it.
    The feature (Open Documents in Client Applications by Default) is not activate.
    Why the MS documents are not working in IE 10?

    Hi,
    According to your post, my understanding is that you failed to open Microsoft documents in SharePoint 2013.
    I recommend to Run the following PowerShell in OWA Server :
    Remove-OfficeWebAppsHost # To Remove any restriction
    Or
    New-OfficeWebAppsHost -Domain <String> # To allow specific domain Name
    In addition, you can allow OAuth via HTTP using the following commands:
    $config = (Get-SPSecurityTokenServiceConfig)
    $config.AllowOAuthOverHttp = $true
    $config.Update()
    Here are two similar articles for you to take a look at:
    http://blogs.msdn.com/b/fabdulwahab/archive/2013/10/30/office-web-apps-with-sharepoint-2013-issues.aspx
    http://stevemannspath.blogspot.in/2013/03/sharepoint-2013-office-web-apps-issue.html
    Best Regards,
    Linda Li
    Linda Li
    TechNet Community Support

  • Opening a website PDF yields "Adobe Reader needs your permission to run." ???

    Opening a website PDF yields "Adobe Reader needs your permission to run." ???

    Are you running Chrome?  Here is the Chrome documentation on blocked plug-ins:  Blocked plug-ins - Chrome Help

  • Unable to view documents on screen it says adobe reader needs your permission to run with a picture of a broken puzzle piece  i have adobe reader xi installed

    un

    Ok, let's continue in here since you were able to answer.
    Still, you need to provide information:
    what is your operating system?
    what is your Reader XI version?
    are you trying to view a local or online PDF?  If online, in what browser?
    what is the full and exact message you are getting?  You can post a screenshot if you want: https://forums.adobe.com/thread/1070933

  • To report a question you need your digital receipt. what if i no longer have that??

    Hi,
    I preordered midnight memories the day that it was available and today Monday the 28th of October "Story of My LIfe was available". it says that i purchased the song and that my preorder is on the album but the song is not in my music! can someone please tell me what is happening and how i can get my song? I never received an email about my download being available, so i have no link. I have tried everything you guys have suggested above but its not working for me . Everytime i go to the download section of my music it says that i have no active downloads. Can someone please please please help me....i'd really like my song! Thanks so much!
    Also i was thinking, maybe if i cancel my order and reorder it then i can get my song. Would this be a better option? and would i get my money refunded right away?
    i was also thinking about reporting my problem to Itunes, but apparently you need your digital receipt to do that which i no longer have what do i do???

    Deauthorize all, then authorize the active computers.
    iTunes Store: About authorization and deauthorization

  • If you upgrade or renew your storage but no longer need it, you can cancel. If you cancel your storage plan within 15 days of an upgrade or within 45 days after a yearly payment, you can contact Apple for a full refund. how do i contect apple to get refun

    If you upgrade or renew your storage but no longer need it, you can cancel. If you cancel your storage plan within 15 days of an upgrade or within 45 days after a yearly payment, you can contact Apple for a full refund.
    i upgrade a few minets ago. how can i contact apple to give me back money?

    Call the Apple online store for your country (1-800-MY-APPLE in the U.S. and Canada).

  • What does it mean when you receive a text on your iphone 6 form your own number and the message is duplicated on each side (sent/recieved) and has "verizon message" with a long number at the end of the text, duplicated as well?

    what does it mean when you receive a text on your iphone 6 from your own number and the message is duplicated on each side (sent/received) and has "verizon message" with a long number at the end of the text, duplicated as well?

        Great question stacybrownie! Let's get to the bottom of this so that it's not a cause for concern. When a message is sent to/from your own number, it will display as one sent, one received. This makes it display two messages as you are seeing. Let's clarify the second part of your question. Where do you see "Verizon Message" exactly? What is the long number at the end of the text? When did this start and is it with all text messages or only this instance?
    AdaS_VZW
    Follow us on Twitter at @VZWSupport 

  • I need your assistance​? Verizon won't port old phone number over to my new FIOS

    Need your help on resolving this issue with Verizon.  I switched from COX cable. Had Verizon FIOS triple play installed at my house about 3 days ago.  I signed up online for Verizon FIOS and selected a new telephone number because I was told online that my old number cannot be ported over to new FIOS.
    Earlier today, I was contacting my friends for a new phone number and learned from them that it is violation of FCC regulation that the Verizon FIOS could not port my old number. They said that the Verizon should be able to port my old number... In my realization, I contacted Verizon customer service, but the rep said that the Verizon FIOS cannot do it because the installation is completed. 
    I wanted to keep my old telephone number that I had years originally with Verizon and then Cox. 
    Any ideas on how to get or make Verizon port over my old telephone number to my Verizon FIOS?  Again, I was told by a Verizon rep or online during the sign up process that it can't be done and/or they won't do it.     

    Need your help on resolving this issue with Verizon.  I switched from COX cable. Had Verizon FIOS triple play installed at my house about 3 days ago.  I signed up online for Verizon FIOS and selected a new telephone number because I was told online that my old number cannot be ported over to new FIOS.
    Earlier today, I was contacting my friends for a new phone number and learned from them that it is violation of FCC regulation that the Verizon FIOS could not port my old number. They said that the Verizon should be able to port my old number... In my realization, I contacted Verizon customer service, but the rep said that the Verizon FIOS cannot do it because the installation is completed. 
    I wanted to keep my old telephone number that I had years originally with Verizon and then Cox. 
    Any ideas on how to get or make Verizon port over my old telephone number to my Verizon FIOS?  Again, I was told by a Verizon rep or online during the sign up process that it can't be done and/or they won't do it.     

  • It might not be a good idea to use your verizon.ne​t email address as your primary...​..

    Team,
    There is a problem using verizon email as your primary email.  If your account is suspended, all email addressed to you is rejected by the verizon servers.  This, as a service, is unacceptable.  I suggest not using your verizon email as your primary email source since there is a chance that Verizon suspends your account and no email gets to you.  I guess sometimes free accounts like gmail, hotmail, and others provide more of a service than those taking your money.
    What do you think?
    Here is my exchange with a verizon tech support person in a online chat.  I will let you know if the emails are retrieved as the tech support person suggests.  What do you think?
    Chat Subject: FiOS Internet (E-Mail)
    Your Question: Team, I opened an issue on 2 September and to date I have not received a reply. The issue number is {edited for privacy}. Until this issue is resolved I cannot receive any email and all emails sent to me are rejected by your servers. This is unsatifactory and I wish it to be resolved asap. thanks.
    A Verizon Service Representative will be with you shortly. Thank you. (18:14:30)
    Agent Kavita has joined. (18:14:44)
    Kavita : Chat ID for this session is 09041020386. (18:14:44)
    Kavita(18:15:30): Thank you for contacting the Verizon FIOS technical chat Support. My name is Kavita and I will assist you regarding the technical concerns. We appreciate your patience in reaching us. May I confirm your FIOS telephone number as 703xxxxxxxx ?
    ben breeland(18:15:50): Yes. that is correct.
    Kavita(18:16:10): Thank you.
    ben breeland(18:16:18): you are welcome.
    Kavita(18:16:28): For account security reasons, I need to confirm few things quickly. May I have the name and address on the account?
    ben breeland(18:17:05): I typed that in earlier, but I will do it again. You should access to it if you work for Verizon.
    ben breeland(18:17:31): xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx​xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Kavita(18:17:41): In case the chat gets disconnected due to any issue at either end, please re-initiate the chat through the same channel or call our FIOS phone support at 888-553-1555, whichever is convenient.
    Kavita(18:17:56): May I have a preferred Email Address where I can send you few troubleshooting steps for future reference?
    ben breeland(18:18:45): troubleshooting steps will not resolve this issue, Kavita. Your script is boring me. When do we get to the issue.
    ben breelandxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    Kavita(18:19:35): Thank you.
    ben breeland(18:19:50): You are welcome.
    Kavita(18:20:45): I went through your issue description, as I understand you have an open ticket and the issue is not yet resolved. , and that?s the reason that you are contacting us, correct?
    ben breeland(18:21:34): Yes. That is correct. I have an open issue, {edited for privacy} , opened 2 September for my emal access and I am contacting you to determine the status of the resolution.
    Kavita(18:22:09): You have reached the right person, I will be more than glad to assist you today
    ben breeland(18:22:52): Great. You are a super star! Show me how you work it.
    Kavita(18:24:52): Please give me a minute while I check the updates on the open ticket.
    ben breeland(18:25:07): Sure. Thank you.
    Kavita(18:25:47): You are welcome.
    Kavita(18:26:02): I truly appreciate your patience.
    ben breeland(18:26:58): By the way, did you know that when an account is suspended, all new email is rejected by your servers? So since I opened this issue, all email addressed to my address has been rejected. Is this the policy on all email accounts with your company? If so, why is this the policy?
    Kavita(18:28:08): Yes I do see that your account is suspended.
    Kavita(18:29:18): Ad regarding the update of the open ticket I see that out technicians are working on it and they will definately get back to by tommorrow morning.
    ben breeland(18:29:41): so it will be resolved by tomorrow morning?
    ben breeland(18:29:52): Or will I get a call by tomorrow morning?
    Kavita(18:30:27): You got it absolutely correct.
    ben breeland(18:30:47): what is correct, Kavita. a call? Or resolution?
    Kavita(18:32:08): You will get a resolution with a call.
    ben breeland(18:32:42): thank you. can you address my question regarding all of the lost email during this period? thank you.
    ben breeland(18:33:42): suspended does not mean cancelled. Yet during the suspension all email sent to me was rejected by your servers. This is not a good thing.
    Kavita(18:35:43): Alright sir, what I would suggest you is tommorrow morning when you will get a call from the advanced technical support, please do ask thenm about the lost emails because as they were working on the issue, they will be able to answer your question in a better way.
    Kavita(18:36:08): Great, I can see your screen now.
    ben breeland(18:36:24): Kavita, why do you need to see my screen?
    ben breeland(18:37:06): Also, if I am not home - tomorrow is Sunday - will they call until they reach me or leave a message if I am not here? Thanks.
    Kavita(18:37:36): I am sorry. I typed by mistake.
    Kavita(18:37:51): Yes they can still reach you on sunday,
    ben breeland(18:38:03): No problem. And if I am not home, what will they do?
    Kavita(18:39:54): They will arrange a call back back and once you reach home you will get the call.
    ben breeland(18:40:24): Ok. Thank you very much. I look forward to a resolution sometime tomorrow.
    Kavita(18:40:39): Sure.
    ben breeland(18:40:50): Sure what?
    Kavita(18:41:05): I truly appreciate your patience
    Kavita(18:41:20): Surely you will get the resolution.
    Kavita(18:41:30): Trust me , you will never have to call back for this resaon .
    Kavita(18:41:40): Verizon always wants you to have the best service experience.
    ben breeland(18:41:51): Thank you. However, I remain frustrated that all of my emails coming to your servers are rejected and that it continues until tomorrow sometime.
    ben breeland(18:42:14): Kavita, I am not so sure Verizon cares about my experience.
    Kavita(18:42:49): Verizon believes in permanent resolutions, so we will make sure that you will get the lost emails also.
    ben breeland(18:43:11): Thanks, Kavita. I am not sure that is possible.
    Kavita(18:43:41): As you are a valued verizon customer, we do care for your experience.
    Kavita(18:44:01): My Sincere apologies for the inconvenience caused.
    ben breeland(18:44:07): OK. Thanks for your help. I look forward to having this resolved tomorrow.
    Kavita(18:44:37): It was noce chatting with you.
    Kavita(18:45:12):
    Our goal is for you to be completely satisfied with the service you have received and that you recommend us to your friends and colleagues, thank you for choosing Verizon.
    Kavita(18:45:28): If you have any other questions, feel free to access live chat again, available daily 8am - 9p, CST or call us 24/7 at 1-888-553-1555. Have a great day
    ben breeland(18:46:47): Thanks.
    Kavita(18:47:12): You are welcome.

    You don't go into the details as to why the account was suspended ... that background might be helpful since you're asking others for their opinion.  In general it sounds like the account was "deleted" at which point all mail is bounced because the address no longer exists -- but Verizon holds the name in reserve for some period of time to prevent someone from re-registering it in case an error was made and for some level of security, I suppose.
    Anyhow ... on your commentary about not using an @verizon.net address as your primary address ... I think you will have this with many providers.  Hotmail, Yahoo, and Gmail all do this if you terminate the account (they do have a suspended account due to inactivity feature which operates differently, but pretty much do the same thing for deletions and such.   I don't use the @verizon.net account as my primary for a different reason however -- my primary address is provider agnostic.   I can move providers (although I'm quite happy with FiOS at the moment) -or- if at some point down the road I have to move out of Verizon territory, my email address will not need to change.  I used this little fact to my advantage when I moved from Comcast to Verizon a few years ago -- no one knew I changed providers because my email address didn't change.   Now .. I don't use one of the free services for email, I own my own domain name (about $10/year from the likes of GoDaddy) and have my domain hosted on the Google Apps tier (but even without that, GoDaddy will do basic forwarding for you of any email address to whatever mail account you're presently using).    Something to think about.

  • Verizon just lost a long-time customer

    On September 19 I walked into a corporate Verizon store on East Washington Avenue in Madison, WI to check out the iPhone 6 and iPhone 6 Plus.  Because of the early upgrade offer both of my lines were then eligible for the upgrade.  I've been a customer for 9 years.  When one of the reps brought up the Edge program I asked him, and then his white-shirt companion, about pricing.  I was clear that I was not interested in the Edge plan if I could not get the upgrade pricing.  Several times I made this clear.  They punched numbers on their calculators and the numbers came out to what I expected for upgrade pricing.  Two days ago I get my bill notification.  I take a look and there it is; full price charged for the phones.
    I called Customer Service, and while the young lady on the phone was sympathetic and did try to correct things (she did her job the best she could), it came down to I have to go into the store and argue with the manager, Dustin, to fight to get the pricing adjusted and get back on my old plan.  What possible reason would I have to pay full price for two phones, and move to a more expensive plan?  I've had plenty of data in my old plan, and a 2-year contract has never bothered me.  Apparently, according to the CS rep on the phone, this is not the first time a store has said one thing and charged differently.
    What's going on, Verizon?  Can you not control your corporate stores?  A long-time customer has to go in and argue with the manager?  Argue?  This has all the makings of a shady used car dealer.  And in the end, if I could manage to get things worked out, what do you have for your long-time customer for the trouble?  Verizon needs to empower their first-line call center folks to offer something for the misery that their lack of corporate control seems to unleash on customers.  Not a $10 gift card either.  Something of this magnitude should have a whopper of an apology offer.
    Anyone thinking of going to Edge, don't.  In fact, after this whole deal today I'm going to take my business to T-Mobile.  I just can't believe Verizon has no control over their stores.  I can't believe they have no ability to correct this kind of issue without sending me into a store to essentially wrestle with a manager who, apparently, is an a-hole.  Head to T-Mobile people.  My old plan with Verizon will cost me $40.00 a month less with T-Mobile.  So again, if I wanted to pay full price for a phone, why wouldn't I just go to a better carrier who has superior coverage in my area?  Well, that's what I'm going to do.
    So long, Verizon.  Maybe you'll learn after state consumer laws crawl up your rear for the actions of the stores you cannot control.

    veldigar wrote:
    ... I was clear that I was not interested in the Edge plan if I could not get the upgrade pricing.  Several times I made this clear.
    Then the employees, and you, don't understand EDGE.  It's not a service plan, it's a PAYMENT option to pay the full price of the phone in installments, and have no "contract" or obligation  to stay with Verizon once the phone is paid for, which you can do at any time.  So if you were trying to get discounted pricing, and the reps were talking EDGE, you were talking at cross purposes....
    In order to get the upgrade pricing, you need to sign a contract for 2 years of service, and agree to an ETF if you leave Verizon before the two years.

  • Weird Access Problems - Really Need Your Advice

    This is complex and confusing, and I am not an IT expert. Let me provide background and symptoms:
    1) I recently moved and transferred ISP providers from Cox to Adelphia.
    2 My setup consists of Mac G5, a Powerbook, and an Airport Station. The internet cable from Adelphia runs into the Airport Station. A cable then runs from the Airport Station to the G5, and the connection to the Powerbook is made via wireless. This setup worked very well when Cox was my ISP
    3) My Apple Mail client accesses mail servers at Cox, Adelphia, Gmail, and .Mac,
    4) When I made the hookup described in 2) I was no longer able to access Gmail from Safari. However, when I directly connected the Adelphia cable to the G5 (cutting the Airport out of the loop) I was able to access Gmail.
    5) Upon review from Adelphia they suggested that I make sure that there no static entries had been placed in the DHCP field. I checked the field using the Airport software and cleared the field (I am not sure if this was static entry or had been placed there by Adelphia).
    6) I hooked the computers and Airport up as in 2). Now the Gmail could be accessed from Safari. HOWEVER, now I could not access Adelphia's mail from Safari. Also I found that I could not access some the the web pages that came up as a result of Google searchs. This has never occurred before.
    7) Additionally, I found now when directly connected the G5 to the Adelphia cable I could still get Gmail, but I no longer could access .Mac from Safari.
    Note: I have gone through the same steps above using Foxfire and get similar results
    BASIC SUMMARY: 1) When Airport is in the connections cannot get access .Mac from Safari (but can access Gmail and Adelphia). 2) When the Airport is connected I cannot access Adelphia from Safari (but can access Gmail and .Mac).
    WHAT SHOULD I DO NEXT???: 1) Should I reset the Airport to its original factory settings and reinstall?. 2) Should I clear out the cookies?. 3) Since these are all related to various mail accounts (Gmail, .Mac, and Adelphia) is there something that could be done with the Apple Mail client???
    Need your advice!
    Mac G5   Mac OS X (10.3.9)  

    PLB11,
    pretty complex indeed.
    I would start by running Network Diagnostics with your standard configuration (i.e. the one with the Airport).
    In the Apple menu, select System Preferences, Network, then click on the "Assist me..." button on the bottom. That should give you two options: "Diagnostics" and "Assistant".
    Try Diagnostics first. If that doesn't solve your problem, run it again without the Airport. If the problem persists, run Assistant and set up a new configuration from scratch, using the original layout with the Airport.
    Please post back the results. Good luck!

  • I need your help with solving a non-standard solutions.

    Hello!
    I need your help with solving a non-standard solutions.
    My name is Andrii and I represent the civil charity. Not so long ago, one man gave us the iPhone 4S (as a donation).
    But later - it became known that this iPhone can not work with SIM cards Ukrainian mobile network operators, as it is blocked by Verizon.
    Is there a way to unlock it with your help, and how it can be done?
    I hope for your understanding and assistance in this matter!
    Thank you.

    Contact a third party unlocking service.
    Purchase an unlocking code.

  • I need your help, I also like to make friends

    In hangzhou, zhejiang province, I come from China, I was able to visit here because of my cell phone was locked.I need a SIM unlocked, I'm not sure I'm youdao translation is correct, but I am a very sincere need your help.
    What happened is that one of my friends in the United States from the United States back to a local on the iphone.After I received very happy, but it has a lock.My mood fell the bottom, after a period of time trying to find the answer I will come to verizon's official website, to look not to understand a foreign language Chinese friends, this is very difficult.
    I want to see this post you the friend can help me, can see the official friends??
    I can't to the United States, my friend is no longer the United States for the time being.So can only rely on you.I don't have your official phone CARDS, even if have also used in China.How could you let me sad!!!!!!!!!!!
    For the Chinese New Year is coming soon, in China is equivalent to you Christmas.I hope my New Year's to receive this gift.
    Private info removed as required by the Terms of Service.
    Message was edited by: Admin Moderator

    Sorry I don't speak or read Chinese but you cannot unlock the iPhone connected to Verizon Wireless unless its active on verizon. After a certain number of months the device can then be unlocked by verizon to use in China.
    Have your friend in the USA activate the iPhone on their account then after awhile it can be unlocked.
    There has recently been an agreement for cell providers to unlock devices easier, and to do it withing a few days. However since it was not made as a rule of law, the providers will skirt around the requirement they agreed to. Very typical of cellular providers.
    Good Luck

  • Need your help on performance issue please

    Hello everyone!
    I need your help to understand an effect I notice with a Thread class I built. I currently work on enhancement of my application Playlist Editor (see http://www.lightdev.com/page74.htm) and a new release will be available soon.
    Among other extensions the new release will have a title filter function which is based on audio data that is recursively read from ID3 tags of files found in a given root directory. The data collection is done by a CollectionThread class which reads into a data model class AudioDataModel and the entire process works fine, no problem with that.
    However, when my application is started for the first time the CollectionThread runs approximately 3 minutes to collect data from approximately 4300 audio files on an Intel Pentium M 1,4 GHz, 512 MB RAM, Windows XP SP2. When the application is shut down and started again, it takes only a few seconds to do the same task for all subsequent launches.
    I already tried to start the application with java option -Xms40m to increase initial heap size. This increases performance in general but the effect is still the same, i.e. first run lasts significantly longer than subsequent runs.
    I also tried to build a pool mechanism which creates many empty objects in the data model and then releases them to contain the actual data at is being read in but this did not lead to better performance.
    It must have to do with how Java (or Windows?) allocates and caches memory. I wonder whether there is a way to pre-allocate memory or if there are any other ideas to improve performance so that the process always only takes seconds instead of minutes?
    I attach the key classes to this message. Any help or ideas is much appreciated!
    Thanks a lot a best regards
    Ulrich
    PS: You can use the news subscription service at
    http://www.lightdev.com/dynTemplate.php4?id=80&dynPage=subscribe.php4 to be informed when the new release of Playlist Editor is available.
    All classes posted here do not need debugging, they already have proven to run error free. The classes are only posted for information for the interested reader - no need to go through all the stuff in detail - only if it interests you.
    My application calls class CollectionThread wich is a subclass of InfoThread. CollectionThread recursively goes through a directory and file structure and stores found ID3 tag information in instances of class ID3v11Tag which in turn gets stored in one instance of class AudioDataModel. All classes are shown below.
    This is the mentioned CollectionThread
    * Light Development Playlist Editor
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.app.playlisteditor.data;
    import com.lightdev.lib.util.InfoThread;
    import java.io.File;
    * A class to collect audio data from a given storage location.
    * <p>
    * <code>CollectionThread</code> uses ID3 tag information to gain data.
    * </p>
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software as well as any licensing notes
    *      inside this documentation
    * @version 1, October 13, 2004
    public class CollectionThread extends InfoThread {
       * constructor
       * @param model  AudioDataModel  the data model to collect data to
      public CollectionThread(AudioDataModel model) {
        this.model = model;
       * constructor, creates a new empty AudioDataModel
      public CollectionThread() {
        this(new AudioDataModel());
       * set the data model to collect data to
       * @param model AudioDataModel  the model to collect data to
      public void setModel(AudioDataModel model) {
        this.model = model;
       * get the data model associated to this thread
       * @return AudioDataModel  the data model
      public AudioDataModel getModel() {
        return model;
       * set the directory to collect data from
       * @param rootDir File  the directory to collect data from
      public void setRootDirectory(File rootDir) {
        this.rootDir = rootDir;
       * do te actual work of this thread, i.e. iterate through a given directory
       * structure and collect audio data
       * @return boolean  true, if work is left
      protected boolean work() {
        boolean workIsLeft = true;
        maxValue = -1;
        filesProcessed = 0;
        if(getStatus() < STATUS_HALT_PENDING) {
          countElements(rootDir.listFiles());
        if(getStatus() < STATUS_HALT_PENDING) {
          workIsLeft = collect(rootDir.listFiles());
        return workIsLeft;
       * count the elements in a given file array including its subdirectories
       * @param files File[]
      private void countElements(File[] files) {
        int i = 0;
        while (i < files.length && getStatus() < STATUS_HALT_PENDING) {
          File file = files;
    if (file.isDirectory()) {
    countElements(file.listFiles());
    i++;
    maxValue++;
    * recursively read data into model
    * @param files File[] the file array representing the content of a given directory
    private boolean collect(File[] files) {
    int i = 0;
    while(i < files.length && getStatus() < STATUS_HALT_PENDING) {
    File file = files[i];
    if(file.isDirectory()) {
    collect(file.listFiles());
    else if(file.getName().toLowerCase().endsWith("mp3")) {
    try {
    model.addTrack(file);
    catch(Exception e) {
    fireThreadException(e);
    i++;
    filesProcessed++;
    fireThreadProgress(filesProcessed);
    return (i<files.length);
    /** the directory to collect data from */
    private File rootDir;
    /** the data model to collect data to */
    private AudioDataModel model;
    /** the number of files this thread processed so far while it is running */
    private long filesProcessed = 0;
    This is class InfoThread
    * Light Development Java Library
    * Copyright (C) 2003, 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.util;
    import java.util.Vector;
    import java.util.Enumeration;
    * Abstract class <code>InfoThread</class> implements a status and listener concept.
    * An <code>InfoThread</code> object actively informs all objects registered as listeners about
    * status changes, progress and possible exceptions. This way the status of a running
    * thread does not require a polling mechanism to be monitored.
    * <p>
    * <code>InfoThread</code> implements the following working scheme
    * </p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public abstract class InfoThread extends Thread {
       * construct an <code>InfoThread</code> object
       * <p>This class is meant to be used when a <code>Thread</code> object is needed that actively
       * informs other objects about its status</code>. It is a good idea therefore to register
       * one or more listeners with instances of this class before doing anything
       * else.</p>
       * @see addInfoThreadListener
      public InfoThread() {
       * set the amount of time this thread shall idle after it is through with one
       * work cycle and before a next work cycle is started. This influences the time
       * other threads have for their work.
       * @param millis long  the number of milliseconds to idle after one work cycle
      public void setIdleMillis(long millis) {
        idleMillis = millis;
       * Causes this thread to begin execution; the Java Virtual Machine calls the <code>run</code>
       * method of this thread. Calls method <code>prepareThread</code> before calling
       * <code>run</code>.
       * @see run
       * @see prepareThread
      public synchronized void start() {
        setStatus(STATUS_INITIALIZING);
        prepareThread();
        setStatus(STATUS_READY);
        super.start();
       * call method <code>start</code> instead of this method.
       * calling this method directly will lead to an exception
       * @see start
      public void run() {
        //System.out.println("InfoThread.run");
        if (status == STATUS_READY) {
          boolean workIsLeft = true;
          setStatus(STATUS_RUNNING);
          while (status < STATUS_STOP_PENDING && workIsLeft) {
            if (status < STATUS_HALT_PENDING) {
              workIsLeft = work();
              if(!workIsLeft) {
                setStatus(STATUS_WORK_COMPLETE);
            if (status == STATUS_HALT_PENDING) {
              setStatus(STATUS_HALTED);
            else if (status == STATUS_STOP_PENDING) {
              setStatus(STATUS_STOPPED);
            else {
              try {
                sleep(idleMillis);
              catch (InterruptedException e) {
                fireThreadException(e);
        else {
          // error: Thread is not ready to run
        setStatus(STATUS_THREAD_FINISHED);
       * stop this thread. This will terminate the thread irrevokably. Use method
       * <code>haltThread</code> to pause a thread with the possiblity to resume work later.
       * @see haltThread
      public void stopThread() {
        switch (status) {
          case STATUS_RUNNING:
            setStatus(STATUS_STOP_PENDING);
            break;
          case STATUS_HALT_PENDING:
            // exception: the thread already is about to halt
            break;
          case STATUS_STOP_PENDING:
            // exception: the thread already is about to stop
            break;
          default:
            // exception: a thread can not be stopped, when it is not running
            break;
       * halt this thread, i.e. pause working allowing to resume later
       * @see resumeThread
      public void haltThread() {
        switch (status) {
          case STATUS_RUNNING:
            setStatus(STATUS_STOP_PENDING);
            break;
          case STATUS_HALT_PENDING:
            // exception: the thread already is about to halt
            break;
          case STATUS_STOP_PENDING:
            // exception: the thread already is about to stop
            break;
          default:
            // exception: a thread can not be halted, when it is not running
            break;
       * resume this thread, i.e. resume previously halted work
       * @see haltThread
      public void resumeThread() {
        if(status == STATUS_HALTED || status == STATUS_HALT_PENDING) {
          setStatus(STATUS_RUNNING);
        else {
          // exception: only halted threads or threads that are about to halt can be resumed
       * this is the method to prepare a thread to run. It is not implemented in this abstract
       * class. Subclasses of <code>InfoThread</code> can implement this method to do anything
       * that might be required to put their thread into STATUS_READY. This method is called
       * automatically by method <code>start</code>.  When implementing this method, it should
       * call method <code>fireThreadException</code> accordingly.
       * @see start
       * @see fireThreadException
      protected void prepareThread() {
        // does nothing in this abstract class but might be needed in subclasses
       * this is the main activity method of this object. It is not implemented in this abstract
       * class. Subclasses of <code>InfoThread</code> must implement this method to do something
       * meaningful. When implementing this method, it should call methods
       * <code>fireThreadProgress</code> and <code>fireThreadException</code> accordingly.
       * @return boolean true, if work is left, false if not
       * @see fireThreadProgress
       * @see fireTreadException
      protected abstract boolean work();
       * add an <code>InfoTreadListener</code> to this instance of <code>InfoThread</code>
       * @param l InfoThreadListener  the listener to add
       * @see removeInfoThreadListener
      public void addInfoThreadListener(InfoThreadListener l) {
        listeners.add(l);
       * remove an <code>InfoTreadListener</code> from this instance of <code>InfoThread</code>
       * @param l InfoThreadListener  the listener to remove
      public void removeInfoThreadListener(InfoThreadListener l) {
        listeners.remove(l);
       * notify all <code>InfoThreadListener</code>s of a status change
       * @param fromStatus int  the status tis thread had before the change
       * @param toStatus int  the status this thread has now
      protected void fireThreadStatusChanged(int fromStatus, int toStatus) {
        Enumeration e = listeners.elements();
        while(e.hasMoreElements()) {
          Object l = e.nextElement();
          if(l instanceof InfoThreadListener) {
            ((InfoThreadListener) l).threadStatusChanged(this, fromStatus, toStatus);
       * notify all <code>InfoThreadListener</code>s of an exception in this thread
       * @param ex Exception  the exception that occurred
      protected void fireThreadException(Exception ex) {
        Enumeration e = listeners.elements();
        while(e.hasMoreElements()) {
          Object l = e.nextElement();
          if(l instanceof InfoThreadListener) {
            ((InfoThreadListener) l).threadException(this, ex);
       * notify all <code>InfoThreadListener</code>s of the progress of this thread
       * @param progressValue long  a value indicating the current thread progress
      protected void fireThreadProgress(long progressValue) {
        Enumeration e = listeners.elements();
        while(e.hasMoreElements()) {
          Object l = e.nextElement();
          if(l instanceof InfoThreadListener) {
            ((InfoThreadListener) l).threadProgress(this, progressValue, maxValue);
       * set the status of this thread and notify all listeners
       * @param newStatus int  the status this thread is to be changed to
      private void setStatus(int newStatus) {
        //System.out.println("InfoThread.setStatus oldStatus=" + status + ", newStatus=" + newStatus);
        int fromStatus = status;
        status = newStatus;
        fireThreadStatusChanged(fromStatus, newStatus);
       * get the current status of this thread
       * @return int  the status
      public int getStatus() {
        return status;
       * cleanup before actual destruction.
      public void destroy() {
        //System.out.println("InfoThread.destroy");
        cleanup();
        super.destroy();
       * cleanup all references this thread maintains
      private void cleanup() {
        //System.out.println("InfoThread.cleanup");
        listeners.removeAllElements();
        listeners = null;
      /* ----------------------- class fields start ------------------------ */
      /** storage for the objects this thread notifies about status changes and progress */
      private Vector listeners = new Vector();
      /** indicator for the status of this thread */
      private int status = STATUS_NONE;
      /** maximum value for threadProgress */
      protected long maxValue = -1;
      /** the idle time inside one work cycle in milliseconds */
      protected long idleMillis = 1;
      /* ----------------------- class fields end -------------------------- */
      /* ----------------------- constants start --------------------------- */
      /** constant value indicating that no status has been set so far */
      public static final int STATUS_NONE = 0;
      /** constant value indicating that the thread is currently initializing */
      public static final int STATUS_INITIALIZING = 1;
      /** constant value indicating that the thread is ready to run */
      public static final int STATUS_READY = 2;
      /** constant value indicating that the thread is running */
      public static final int STATUS_RUNNING = 3;
      /** constant value indicating that the thread is about to halt */
      public static final int STATUS_HALT_PENDING = 4;
      /** constant value indicating that the thread is halted */
      public static final int STATUS_HALTED = 5;
      /** constant value indicating that the work of this thread is complete */
      public static final int STATUS_WORK_COMPLETE = 6;
      /** constant value indicating that the thread is about to stop */
      public static final int STATUS_STOP_PENDING = 7;
      /** constant value indicating that the thread is stopped */
      public static final int STATUS_STOPPED = 8;
      /** constant value indicating that the thread is finished */
      public static final int STATUS_THREAD_FINISHED = 9;
      /* ----------------------- constants end --------------------------- */
    }this is the InfoThreadListener interface
    * Light Development Java Library
    * Copyright (C) 2003, 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.util;
    * An interface classes interested to receive events from objects
    * of class <code>InfoThread</code> need to implement.
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public interface InfoThreadListener {
       * method to receive a status change notification from a thread
       * @param thread InfoThread  the thread which status changed
       * @param fromStatus int  the status which the thread had before the change
       * @param toStatus int  the status which the thread has now
      public void threadStatusChanged(InfoThread thread, int fromStatus, int toStatus);
       * method to receive a notification about the progress of a thread
       * @param thread InfoThread  the thread which notified about its progress
       * @param progressValue long  the value (e.g. 10 if 100 percent completed, 20 of 1 million files processed, etc.)
      public void threadProgress(InfoThread thread, long progressValue, long maxValue);
       * method to receive a notifiaction about the fact that an exception occurred in a thread
       * @param thread InfoThread  the thread for which an exception occurred
       * @param e Exception  the exception that occurred
      public void threadException(InfoThread thread, Exception e);
    }This is class AudioFileDescriptor
    * Light Development Java Library
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.audio;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.io.Serializable;
    import java.text.DecimalFormat;
    * This class models characteristics of an audio file such as the absolute path
    * of the file, its tag contents (if any) and the play duration, etc.
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public class AudioFileDescriptor implements Serializable, Comparable {
      public AudioFileDescriptor(String absolutePath) throws FileNotFoundException, IOException {
        load(absolutePath);
      public boolean equals(Object o) {
        if(o != null && o instanceof AudioFileDescriptor) {
          return ((AudioFileDescriptor) o).getAbsolutePath().equalsIgnoreCase(this.getAbsolutePath());
        else {
          return false;
      public void load(String absolutePath) throws FileNotFoundException, IOException {
        this.absolutePath = absolutePath;
        RandomAccessFile rf = new RandomAccessFile(absolutePath, "r");
        if(id3v11Tag == null) {
          id3v11Tag = new ID3v11Tag(rf, false);
        else {
          id3v11Tag.readTag(rf, rf.length() - 128);
        rf.close();
      public String getAbsolutePath() {
        return absolutePath;
      public ID3v11Tag getID3v11Tag() {
        return id3v11Tag;
      public void setID3v11Tag(ID3v11Tag tag) {
        this.id3v11Tag = tag;
      public String toString() {
        DecimalFormat df = new DecimalFormat("00");
        return id3v11Tag.getArtist() + ", " + id3v11Tag.getAlbum() + " - " +
            df.format(id3v11Tag.getTrackNumber()) + " " + id3v11Tag.getTitle();
       * Compares this object with the specified object for order.
       * @param o the Object to be compared.
       * @return a negative integer, zero, or a positive integer as this object is less than, equal to,
       *   or greater than the specified object.
       * @todo Implement this java.lang.Comparable method
      public int compareTo(Object o) {
        return toString().compareTo(o.toString());
      private String absolutePath;
      private ID3v11Tag id3v11Tag;
      private transient long duration = -1;
      private transient int type = TYPE_UNKNOWN;
      public static final transient int TYPE_UNKNOWN = 0;
      public static final transient int TYPE_MP3 = 1;
    }This is class ID3V11Tag into which the data is actually stored
    * Light Development Java Library
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.lib.audio;
    import java.io.File;
    import java.io.RandomAccessFile;
    import java.io.IOException;
    import java.io.Serializable;
    import java.text.DecimalFormat;
    * This class is a very simple implementation of an ID3v11Tag. It models an ID3 tag
    * pretty much the same way as it is physically stored inside an audio file.
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software
    * @version Version 1, October 13, 2004
    public class ID3v11Tag implements Serializable, Comparable {
       * construct an ID3v11Tag and read tag content from a given file
       * <p>This constructor can be used for cases where a RandomAccessFile has already
       * been opened and will be closed elsewhere</p>
       * @param rf RandomAccessFile  the open file to read from
       * @param isAtTagStartPos boolean  true, if the file pointer is at the
       * position where the ID3 tag starts; when false, the pointer is positioned accordingly here
       * @throws IOException
      public ID3v11Tag(RandomAccessFile rf, boolean isAtTagStartPos) throws IOException {
        if(isAtTagStartPos) {
          readTag(rf);
        else {
          readTag(rf, rf.length() - 128);
       * construct an ID3v11Tag and read tag content from a file at a given location
       * <p>This constructor opens and closes the audio file for reading</p>
       * @param absolutePath String  the absolute path to the audio file to open
       * @throws IOException
      public ID3v11Tag(String absolutePath) throws IOException {
        RandomAccessFile rf = new RandomAccessFile(absolutePath, "r");
        readTag(rf, rf.length() - 128);
        rf.close();
       * construct an ID3v11Tag and read tag content from a given file
       * <p>This constructor opens and closes the audio file for reading</p>
       * @param audioFile File  the audio file to read from
       * @throws IOException
      public ID3v11Tag(File audioFile) throws IOException {
        this(audioFile.getAbsolutePath());
       * get a string representation of this object
       * @return String
      public String toString() {
        DecimalFormat df = new DecimalFormat("00");
        return getArtist() + ", " + getAlbum() + " - " + df.format(getTrackNumber()) + " " + getTitle();
       * position to file pointer and read the tag
       * @param rf RandomAccessFile  the file to read from
       * @param jumpPos long  the position to jump to (the tag start position)
       * @throws IOException
      public void readTag(RandomAccessFile rf, long jumpPos) throws IOException {
        rf.seek(jumpPos);
        readTag(rf);
       * read the tag from a given file, assuming the file pointer to be at the tag start position
       * @param rf RandomAccessFile  the file to read from
       * @throws IOException
      public void readTag(RandomAccessFile rf) throws IOException {
        rf.read(tagBuf);
        if(tag.equalsIgnoreCase(new String(tagBuf))) {
          rf.read(title);
          rf.read(artist);
          rf.read(album);
          rf.read(year);
          rf.read(comment);
          rf.read(trackNo);
          rf.read(genre);
      public String getTitle() {
        return new String(title).trim();
      public String getArtist() {
        return new String(artist).trim();
      public String getAlbum() {
        return new String(album).trim();
      public String getYear() {
        return new String(year).trim();
      public String getComment() {
        return new String(comment).trim();
      public int getGenreId() {
        try {
          int id = new Byte(genre[0]).intValue();
          if(id < GENRE_ID_MIN || id > GENRE_ID_MAX) {
            return GENRE_ID_OTHER;
          else {
            return id;
        catch(Exception ex) {
          return GENRE_ID_OTHER;
      public String getGenreName() {
        return genreNames[getGenreId()];
      public int getTrackNumber() {
        try {
          return (int) trackNo[0];
        catch(Exception e) {
          return 0;
       * Compares this object with the specified object for order.
       * @param o the Object to be compared.
       * @return a negative integer, zero, or a positive integer as this object is less than, equal to,
       *                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

    Hi Franck,
    thank you, mate. I did what you suggested (changed class attached) but that did not change the mentioned behaviour.
    The first run is approximately 75 seconds with Java option -Xms40m and approx. double without, the second run and all subsequent runs are only 2-3 seconds each (!!!) even when terminating and re-starting the application between thread runs.
    I'm pretty clueless about that, any more help on this anyone?
    Thanks a lot and best regards
    Ulrich
    PS: BTW, I forgot to post the class that is filled with data by class CollectionThread, so here it is
    * Light Development Playlist Editor
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.app.playlisteditor.data;
    import java.io.File;
    import com.lightdev.lib.audio.ID3v11Tag;
    import javax.sound.sampled.UnsupportedAudioFileException;
    import java.io.IOException;
    import java.io.Serializable;
    import com.lightdev.lib.audio.AudioFileDescriptor;
    import com.lightdev.lib.ui.SortListModel;
    import java.util.Iterator;
    * Storage model for audio data.
    * <p>
    * <code>AudioDataModel</code> can be used to store ID3 tag data collected from
    * a directory with audio files to perform queries and reports on the found data.
    * </p>
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software as well as any licensing notes
    *      inside this documentation
    * @version 1, October 15, 2004
    public class AudioDataModel extends SortListModel implements Serializable {
       * constructor
      public AudioDataModel() {
       * add an audio track from a given audio file
       * <p>This will attempt to read ID3 tag data from the file.</p>
       * @param audioFile File  the file to add audio data for
       * @throws IOException
      public void addTrack(File audioFile) throws IOException {
        AudioFileDescriptor afd = new AudioFileDescriptor(audioFile.getAbsolutePath());
        if (!data.contains(afd)) {
          data.add(afd);
       * get all tracks for agiven combination of genre name, artist name and album name. Any of
       * the parameters may be null or AudioDataModel.FILTER_ALL
       * <p>Ugly code, I know, but it simply hard codes all combinations of the the mentioned
       * parameters. Any more elegant implementations welcome.</p>
       * @param genreName String  a genre name to get tracks for
       * @param artistName String  an artist name to get tracks for
       * @param albumName String  an album name to get tracks for
       * @return SortListModel   the found tracks in a list model
      public SortListModel getTracks(String genreName, String artistName, String albumName) {
        SortListModel foundTracks = new SortListModel();
        Iterator e = data.iterator();
        while(e.hasNext()) {
          AudioFileDescriptor afd = (AudioFileDescriptor) e.next();
          ID3v11Tag tag = afd.getID3v11Tag();
          if(genreName == null || genreName.equalsIgnoreCase(FILTER_ALL)) {
            if(artistName == null || artistName.equalsIgnoreCase(FILTER_ALL)) {
              if (tag.getAlbum().equalsIgnoreCase(albumName))
                foundTracks.add(afd);
            else {
              if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
                if (tag.getArtist().equalsIgnoreCase(artistName))
                  foundTracks.add(afd);
              else {
                if (tag.getArtist().equalsIgnoreCase(artistName) &&
                    tag.getAlbum().equalsIgnoreCase(albumName))
                  foundTracks.add(afd);
          else {
            if(artistName == null || artistName.equalsIgnoreCase(FILTER_ALL)) {
              if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
                if (tag.getGenreName().equalsIgnoreCase(genreName))
                  foundTracks.add(afd);
              else {
                if (tag.getGenreName().equalsIgnoreCase(genreName) &&
                    tag.getAlbum().equalsIgnoreCase(albumName))
                  foundTracks.add(afd);
            else {
              if(albumName == null || albumName.equalsIgnoreCase(FILTER_ALL)) {
                if (tag.getGenreName().equalsIgnoreCase(genreName) &&
                    tag.getArtist().equalsIgnoreCase(artistName))
                  foundTracks.add(afd);
              else {
                if (tag.getGenreName().equalsIgnoreCase(genreName) &&
                    tag.getArtist().equalsIgnoreCase(artistName) &&
                    tag.getAlbum().equalsIgnoreCase(albumName))
                  foundTracks.add(afd);
        foundTracks.sort();
        return foundTracks;
       * list all artists in this model
       * @return SortListModel
      public SortListModel listArtists() {
        SortListModel artists = new SortListModel();
        artists.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String artistName = tag.getArtist();
          if (artists.indexOf(artistName) < 0) {
            artists.add(artistName);
        artists.sort();
        return artists;
       * list all artists in this model having titles belonging to a given genre
       * @param genreName String  name of the genre artists are searched for
       * @return SortListModel
      public SortListModel listArtists(String genreName) {
        SortListModel artists = new SortListModel();
        artists.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String artistName = tag.getArtist();
          String genre = tag.getGenreName();
          if (artists.indexOf(artistName) < 0 && genre.equalsIgnoreCase(genreName)) {
            artists.add(artistName);
        artists.sort();
        return artists;
       * list all genres in this model
       * @return SortListModel
      public SortListModel listGenres() {
        SortListModel genres = new SortListModel();
        genres.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String genreName = tag.getGenreName();
          if (genres.indexOf(genreName) < 0) {
            genres.add(genreName);
        genres.sort();
        return genres;
       * list all albums in this model
       * @return SortListModel
      public SortListModel listAlbums() {
        SortListModel albums = new SortListModel();
        albums.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String albumName = tag.getAlbum();
          if (albums.indexOf(albumName) < 0) {
            albums.add(albumName);
        albums.sort();
        return albums;
       * list all albums in this model having titles belonging to a given genre
       * @param genreName String  name of the genre albums are searched for
       * @return SortListModel
      public SortListModel listAlbums(String genreName) {
        SortListModel albums = new SortListModel();
        albums.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String albumName = tag.getAlbum();
          String genre = tag.getGenreName();
          if (albums.indexOf(albumName) < 0 && genre.equalsIgnoreCase(genreName)) {
            albums.add(albumName);
        albums.sort();
        return albums;
       * list all albums in this model having titles belonging to a given genre and artist
       * @param genreName String  name of the genre albums are searched for
       * @param artistName String  name of the artist albums are searched for
       * @return SortListModel
      public SortListModel listAlbums(String genreName, String artistName) {
        SortListModel albums = new SortListModel();
        albums.add(FILTER_ALL);
        Iterator e = data.iterator();
        while (e.hasNext()) {
          ID3v11Tag tag = ((AudioFileDescriptor) e.next()).getID3v11Tag();
          String albumName = tag.getAlbum();
          String genre = tag.getGenreName();
          String artist = tag.getArtist();
          if(genreName == null || genreName.equalsIgnoreCase(FILTER_ALL)) {
            if (albums.indexOf(albumName) < 0 &&
                artist.equalsIgnoreCase(artistName))
              albums.add(albumName);
          else {
            if (albums.indexOf(albumName) < 0 &&
                genre.equalsIgnoreCase(genreName) &&
                artist.equalsIgnoreCase(artistName))
              albums.add(albumName);
        albums.sort();
        return albums;
       * get the number of audio tracks stored in this data model
       * @return int  the number of tracks
      public int getTrackCount() {
        return data.size();
      /** constant to select all items of a given part */
      public static final String FILTER_ALL = "    all";
    }...and here the changed CollectionThread now caching found File objects in a vector
    * Light Development Playlist Editor
    * Copyright (C) 2004 Ulrich Hilger
    * This program is free software; you can redistribute it and/or
    * modify it under the terms of the GNU General Public License
    * as published by the Free Software Foundation; either version 2
    * of the License, or (at your option) any later version.
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    * You should have received a copy of the GNU General Public License
    * along with this program; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
    package com.lightdev.app.playlisteditor.data;
    import com.lightdev.lib.util.InfoThread;
    import java.io.File;
    import java.util.Vector;
    import java.util.Enumeration;
    * A class to collect audio data from a given storage location.
    * <p>
    * <code>CollectionThread</code> uses ID3 tag information to gain data.
    * </p>
    * <p>See <a href="http://www.id3.org">http://www.id3.org</a> for details about
    * ID3 tags.</p>
    * @author Ulrich Hilger
    * @author Light Development
    * @author <a href="http://www.lightdev.com">http://www.lightdev.com</a>
    * @author <a href="mailto:[email protected]">[email protected]</a>
    * @author published under the terms and conditions of the
    *      GNU General Public License,
    *      for details see file gpl.txt in the distribution
    *      package of this software as well as any licensing notes
    *      inside this documentation
    * @version 1, October 13, 2004
    public class CollectionThread extends InfoThread {
       * constructor
       * @param model  AudioDataModel  the data model to collect data to
      public CollectionThread(AudioDataModel model) {
        this.model = model;
       * constructor, creates a new empty AudioDataModel
      public CollectionThread() {
        this(new AudioDataModel());
       * set the data model to collect data to
       * @param model AudioDataModel  the model to collect data to
      public void setModel(AudioDataModel model) {
        this.model = model;
       * get the data model associated to this thread
       * @return AudioDataModel  the data model
      public AudioDataModel getModel() {
        return model;
       * set the directory to collect data from
       * @param rootDir File  the directory to collect data from
      public void setRootDirectory(File rootDir) {
        this.rootDir = rootDir;
       * this is the method to prepare a thread to run.
      protected void prepareThread() {
        maxValue = -1;
        filesProcessed = 0;
        innerCount = 0;
        fileList = new Vector();
       * do the actual work of this thread, i.e. iterate through a given directory
       * structure and collect audio data
       * @return boolean  true, if work is left
      protected boolean work() {
        boolean workIsLeft = true;
        if(getStatus() < STATUS_HALT_PENDING) {
          countElements(rootDir.listFiles());
        if(getStatus() < STATUS_HALT_PENDING) {
          workIsLeft = collect(); //collect(rootDir.listFiles());
          fileList.clear();
          fileList = null;
        return workIsLeft;
       * count the elements in a given file array including its subdirectories
       * @param files File[]
      private void countElements(File[] files) {
        int i = 0;
        while (i < files.length && getStatus() < STATUS_HALT_PENDING) {
          File file = files;
    if (file.isDirectory()) {
    countElements(file.listFiles());
    else {
    fileList.add(file);
    i++;
    maxValue++;
    * read data into model
    * @param files File[] the file array representing the content of a given directory
    * @return boolean true, if work is left
    private boolean collect(/*File[] files*/) {
    Enumeration files = fileList.elements();
    while(files.hasMoreElements() && getStatus() < STATUS_HALT_PENDING) {
    File file = (File) files.nextElement();
    try {
    model.addTrack(file);
    catch(Exception e) {
    fireThreadException(e);
    filesProcessed++;
    if(++innerCount > 99) {
    innerCount = 0;
    fireThreadProgress(filesProcessed);
    return false;
    int i = 0;
    while(i < files.length && getStatus() < STATUS_HALT_PENDING) {
    File file = files[i];
    if(file.isDirectory()) {
    collect(file.listFiles());
    else if(file.getName().toLowerCase().endsWith("mp3")) {
    try {
    model.addTrack(file);
    catch(Exception e) {
    fireThreadException(e);
    i++;
    filesProcessed++;
    fireThreadProgress(filesProcessed);
    return (i<files.length);
    /** the directory to collect data from */
    private File rootDir;
    /** the data model to collect data to */
    private AudioDataModel model;
    /** the number of files this thread processed so far while it is running */
    private long filesProcessed = 0;
    /** a list to temporary store found files */
    private Vector fileList;
    /** counter to determine when to fire progress messages */
    private int innerCount = 0;

  • I need your help with a decision to use iPhoto.  I have been a PC user since the mid 1980's and more recently have used ACDSee to manage my photo images and Photoshop to edit them.  I have used ProShow Gold to create slideshows.  I am comfortable with my

    I need your help with a decision to use iPhoto.  I have been a PC user since the mid 1980’s and more recently have used ACDSee to manage my photo images and Photoshop to edit them.  I have used ProShow Gold to create slideshows.  I am comfortable with my own folder and file naming conventions. I currently have over 23,000 images of which around 60% are scans going back 75 years.  Since I keep a copy of the originals, the storage requirements for over 46,000 images is huge.  180GB plus.
    I now have a Macbook Pro and will add an iMac when the new models arrive.  For my photos, I want to stay with Photoshop which also gives me the Bridge.  The only obvious reason to use iPhoto is to take advantage of Faces and the link to iMovie to make slideshows.  What am I missing and is using iPhoto worth the effort?
    If I choose to use iPhoto, I am not certain whether I need to load the originals and the edited versions. I suspect that just the latter is sufficient.  If I set PhotoShop as my external editor, I presume that iPhoto will keep track of all changes moving forward.  However, over 23,000 images in iPhoto makes me twitchy and they are appear hidden within iPhoto.  In the past, I have experienced syncing problems with, and database errors in, large databases.  If I break up the images into a number of projects, I loose the value of Faces reaching back over time.
    Some guidance and insight would be appreciated.  I have a number of Faces questions which I will save for later. 

    Bridge and Photoshop is a common file-based management system. (Not sure why you'd have used ACDSEE as well as Bridge.) In any event, it's on the way out. You won't be using it in 5 years time.
    Up to this the lack of processing power on your computer left no choice but to organise this way. But file based organisation is as sensible as organising a Shoe Warehouse based on the colour of the boxes. It's also ultimately data-destructive.
    Modern systems are Database driven. Files are managed, Images imported, virtual versions, lossless processing and unlimited editing are the way forward.
    For a Photographer Photoshop is overkill. It's an enormously powerful app, a staple of the Graphic Designers' trade. A Photographer uses maybe 15% to 20% of its capability.
    Apps like iPhoto, Lightroom, Aperture are the way forward - for photographers. There's the 20% of Photoshop that shooters actually use, coupled with management and lossless processing. Pop over to the Aperture or Lightroom forums (on the Adobe site) and one comment shows up over and over again... "Since I started using Aperture/ Lightroom I hardly ever use Photoshop any more..." and if there is a job that these apps can do, then the (much) cheaper Elements will do it.
    The change is not easy though, especially if you have a long-standing and well thought out filing system of your own. The first thing I would strongly advise is that you experiment before making any decisions. So I would create a Library, import 300 or 400 shots and play. You might as well do this in iPhoto to begin with - though if you’re a serious hobbyist or a Pro then you'll find yourself looking further afield pretty soon. iPhoto is good for the family snapper, taking shots at birthdays and sharing them with friends and family.
    Next: If you're going to successfully use these apps you need to make a leap: Your files are not your Photos.
    The illustration I use is as follows: In my iTunes Library I have a file called 'Let_it_Be_The_Beatles.mp3'. So what is that, exactly? It's not the song. The Beatles never wrote an mp3. They wrote a tune and lyrics. They recorded it and a copy of that recording is stored in the mp3 file. So the file is just a container for the recording. That container is designed in a specific way attuned to the characteristics and requirements of the data. Hence, mp3.
    Similarly, that Jpeg is not your photo, it's a container designed to hold that kind of data. iPhoto is all about the data and not about the container. So, regardless of where you choose to store the file, iPhoto will manage the photo, edit the photo, add metadata to the Photo but never touch the file. If you choose to export - unless you specifically choose to export the original - iPhoto will export the Photo into a new container - a new file containing the photo.
    When you process an image in iPhoto the file is never touched, instead your decisions are recorded in the database. When you view the image then the Master is presented with these decisions applied to it. That's why it's lossless. You can also have multiple versions and waste no disk space because they are all just listings in the database.
    These apps replace the Finder (File Browser) for managing your Photos. They become the Go-To app for anything to do with your photos. They replace Bridge too as they become a front-end for Photoshop.
    So, want to use a photo for something - Export it. Choose the format, size and quality you want and there it is. If you're emailing, uploading to websites then these apps have a "good enough for most things" version called the Preview - this will be missing some metadata.
    So it's a big change from a file-based to Photo-based management, from editing files to processing Photos and it's worth thinking it through before you decide.

Maybe you are looking for

  • IMovie isn't accepting my youtube password

    Literally a week after I last used the youtube uploader in iMovie, I've tried uploading a video to youtube through iMovie, but upon completing the necessary form, it says my username and password aren't correct. Even after confirming this wasn't true

  • Reading data from dynamically from different file.

    Is there any function moudle or class to read data from a file in application layer, whoes structure is changing dynamically. Urgent....... Can any one help me out in this...... Thanks in advance.... Thanks, feroz.

  • Certificate DN doesn't match AD DIT

    I am building a PKI with the plan of becoming cross certified with an external bridge in the future. The required Distinguished Name (DN) for cross-certification is different than the internal AD OU structure and the issue is that I want to publish 2

  • Mac Changes Date Picture was Taken? Why? Fix?

    Please excuse this question if it has been addressed before. I did a search in the forums and didn't find an appropriate answer. I am a new user to the Mac Pro. I am coming from a Dell, Windows XP. I use Outlook and Gmail (different addresses) for em

  • Error Message on iTunes 45048 using Windows XP

    Can someone please help? On my iTunes account I have a number of tracks - all purchased via my iPad or iPhone and need to download to my PC (XP is the Operating System) however, when you go the the iCloud symbol and click to download the following er